赞
踩
个推集成步骤:
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的错误信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。