個推集成步驟:
1. 將SDK資料包中GETUI_ANDROID_SDK/資源文件/so
目錄下所需CPU架構的目錄拷貝到app/src/main/jniLibs
目錄下,
在app/build.gradle
文件中的android.defaultConfig
下指定所需的 CPU 架構
android {
...
defaultConfig {
...
ndk {
// 添加項目所需CPU類型的最小集
abiFilters "armeabi", "armeabi-v7a", "x86_64"
}
}
}
注意:如果將 so 庫放置在app/src/main/jniLibs
以外的其他目錄,請在app/build.gradle
文件中的android
段內正確設置 so 路徑。假設 so 路徑爲app/libs
,則需添加如下配置代碼:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
2. 添加Maven庫地址
在項目根目錄build.gradle
文件中,添加個推maven庫地址,
allprojects {
repositories {
maven {
url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/"
}
}
}
3. 配置依賴
在app/build.gradle
文件中引用個推SDK依賴庫
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.getui:sdk:2.13.3.0'
}
4. 配置個推應用參數
在app/build.gradle
文件中的android.defaultConfig
下添加manifestPlaceholders
,配置個推相關的應用參數
manifestPlaceholders = [
GETUI_APP_ID : "APP_ID",
GETUI_APP_KEY : "APP_KEY",
GETUI_APP_SECRET : "APP_SECRET"
]
5. 在Manifest中配置個推SDK組件
請在AndroidManifest.xml
中<application>
標籤內增加以下組件配置(由於使用了manifestPlaceholders
來做參數替換,因此以下配置無需手工修改,直接複製粘貼即可):
<!-- 個推SDK配置開始 -->
<!-- Android9.0以上默認不支持http通信,爲保證SDK正常使用,請在application節點下新增該屬性 -->
<application android:usesCleartextTraffic="true">
<!-- 配置的第三方參數屬性 -->
<meta-data
android:name="PUSH_APPID"
android:value="${GETUI_APP_ID}" />
<meta-data
android:name="PUSH_APPKEY"
android:value="${GETUI_APP_KEY}" />
<meta-data
android:name="PUSH_APPSECRET"
android:value="${GETUI_APP_SECRET}" />
<!-- 配置SDK核心服務 -->
<!-- permission屬性在2.13.1.0版本後必須配置 -->
<service
android:name="com.igexin.sdk.PushService"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="false"
android:label="NotificationCenter"
android:process=":pushservice">
<intent-filter>
<action android:name="com.igexin.sdk.action.service.message"/>
</intent-filter>
</service>
<receiver android:name="com.igexin.sdk.PushReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.intent.action.USER_PRESENT" />
<!-- 以下三項爲可選的action聲明,有助於提高service存活率 -->
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>
<activity
android:name="com.igexin.sdk.PushActivity"
android:excludeFromRecents="true"
android:exported="false"
android:process=":pushservice"
android:taskAffinity="com.igexin.sdk.PushActivityTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
<activity
android:name="com.igexin.sdk.GActivity"
android:excludeFromRecents="true"
android:exported="true"
android:process=":pushservice"
android:taskAffinity="com.igexin.sdk.PushActivityTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
<!-- 個推SDK配置結束 -->
6. 添加權限聲明
請在<manifest>
根標籤下加入個推SDK所必需的權限,配置如下(由於使用了manifestPlaceholders
來做參數替換,因此以下配置無需手工修改,直接複製粘貼即可):
<!-- 個推SDK權限配置開始 -->
<!-- 必選權限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<!-- 以下爲可選權限 -->
<!-- 支持iBeancon 需要藍牙權限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- 支持個推3.0 電子圍欄功能 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 自定義權限 -->
<uses-permission android:name="getui.permission.GetuiService.${applicationId}" />
<permission
android:name="getui.permission.GetuiService.${applicationId}"
android:protectionLevel="normal"/>
<!-- 個推SDK權限配置結束 -->
7. 配置自定義推送服務
import com.igexin.sdk.PushService;
public class GePushService extends PushService {
}
在AndroidManifest.xml中添加上述自定義Service (使用maven集成,process屬性必須爲pushservice
,切勿更改):
<service
android:name=".service.GePushService"
android:exported="true"
android:label="PushService"
android:process=":pushservice">
</service>
8. 接收推送服務事件
在項目源碼中添加一個繼承自com.igexin.sdk.GTIntentService的類,用於接收CID、透傳消息以及其他推送服務事件
package com.getui.demo;
import android.content.Context;
import android.os.Message;
import android.util.Log;
import com.igexin.sdk.GTIntentService;
import com.igexin.sdk.PushConsts;
import com.igexin.sdk.PushManager;
import com.igexin.sdk.message.FeedbackCmdMessage;
import com.igexin.sdk.message.GTCmdMessage;
import com.igexin.sdk.message.GTTransmitMessage;
import com.igexin.sdk.message.SetTagCmdMessage;
/**
* 繼承 GTIntentService 接收來自個推的消息, 所有消息在線程中回調, 如果註冊了該服務, 則務必要在 AndroidManifest中聲明, 否則無法接受消息<br>
*/
public class DemoIntentService extends GTIntentService {
public DemoIntentService() {
}
@Override
public void onReceiveServicePid(Context context, int pid) {
}
// 處理透傳消息
@Override
public void onReceiveMessageData(Context context, GTTransmitMessage msg) {
// 透傳消息的處理方式,詳看SDK demo
}
// 接收 cid
@Override
public void onReceiveClientId(Context context, String clientid) {
Log.e(TAG, "onReceiveClientId -> " + "clientid = " + clientid);
}
// cid 離線上線通知
@Override
public void onReceiveOnlineState(Context context, boolean online) {
}
// 各種事件處理回執
@Override
public void onReceiveCommandResult(Context context, GTCmdMessage cmdMessage) {
}
// 通知到達,只有個推通道下發的通知會回調此方法
@Override
public void onNotificationMessageArrived(Context context, GTNotificationMessage msg) {
}
// 通知點擊,只有個推通道下發的通知會回調此方法
@Override
public void onNotificationMessageClicked(Context context, GTNotificationMessage msg) {
}
}
在AndroidManifest.xml
中配置上述 IntentService 類:
<!-- permission屬性在2.13.1.0版本後必須配置 -->
<service
android:name="com.getui.demo.DemoIntentService"
android:permission="android.permission.BIND_JOB_SERVICE"/>
9. 初始化SDK
在主進程的Application.onCreate()、Activity.onCreate()方法中初始化個推SDK
PushManager.getInstance().initialize(getApplicationContext(), DemoPushService.class);
PushManager.getInstance().registerPushIntentService(getApplicationContext(),DemoIntentService.class);
完成以上步驟後,即可運行測試,如果clientId打印成功。就可以推送消息了。如果clientId沒有打印成功,創建推送消息 是發送不出去的。
clientId沒有打印,可以查看打印信息中有沒有libgetuiext3.so的錯誤信息。