集成個推消息推送

個推集成步驟:

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的錯誤信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章