Android 第三方音讯推送之个推集成

一:简介
个推Android SDK为Android利用提供了平安稳固的推送服务模块,开发者只需在原有App中进行简略的配置和编码工作,即可疾速取得实时稳固的音讯推送能力。
第三方推送次要是依照对方提供的开发文档集成就好
二:推送流程

1.App调用个推SDK初始化接口,获取推送标识ClientID(简称CID)
2.App将CID将CID上传到服务端进行保留。通常须要将该CID与相应的用户ID进行关联,以便后续针对特定用户进行音讯推送
3.业务方服务器须要给指定CID的设施发送音讯时,调用个推服务器音讯推送接口,个推服务器寻找指标设施,将音讯下发给相应的个推SDK,进而将音讯进行展现或者APP自行处理
三:权限管制
在AndroidManifest下的<manifest>节点下

 <uses-permission android:name="android.permission.INTERNET" />    <!--查看网络状态,sdk重连机制等须要应用-->    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <!--获取手机状态参数,并作为生成个推惟一标识的必要参数-->    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <!--查看wifi连贯状态-->    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    <!--开机自启动权限,晋升sdk沉闷,保障触达-->    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />    <!--读写权限-->    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <!--触动-->    <uses-permission android:name="android.permission.VIBRATE" />    <!--获取工作信息,目标是避免sdk被频繁唤醒-->    <uses-permission android:name="android.permission.GET_TASKS" />

四:集成
第一步:在我的项目根目录build.gradle文件下,配置maven仓库

allprojects {    repositories {        google()        jcenter()        maven { url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/" }    }}

第二步:配置依赖
在app下的build.gradle,增加sdk依赖

  //个推implementation 'com.getui:sdk:2.14.1.0' //个推统计implementation 'com.getui:gssdk:2.3.0.1'

并在android下defaultConfig节点下配置个推的生成的AppId等

android{defaultConfig{ //个推 //从 3.1.2.0 版本开始,APPID 占位符从 GETUI_APP_ID 切换为 GETUI_APPID                   //后续所有产品的 APPID 均对立配置为 GETUI_APPID 占位符        manifestPlaceholders = [                GETUI_APP_ID      : "*********************",                GETUI_APP_KEY     : "*********************",                GETUI_APP_SECRET  : "*********************",                GS_APPID          : *********************",               ]        ndk {            //抉择要增加的对应cpu类型的.so库。            abiFilters 'arm64-v8a','armeabi', 'armeabi-v7a', 'x86_64','x86'        }}}

个推3.1.2.0当前
1.移除 Gradle 中 GETUI_APP_KEY、GETUI_APP_SECRET、配置,GETUI_APP_ID 改为 GETUI_APPID, AndroidManifest 中仅保留 GETUI_APPID 占位符。
2.为兼容 Android 9.0,请在 application 节点增加 android:usesCleartextTraffic="true";
3.新增PushManager.getInstance().initialize(Context context) 接口进行初始化,举荐应用该接口进行初始化。
4.新增PushManager.getInstance().setDebugLogger(Context context, IUserLoggerInterface loggerInterface) 接口,用于调试日志输入。
第四步:配置推送服务
为了让推送服务在局部支流机型上更稳固运行,从 2.9.5.0 版本开始,个推反对第三方利用配置应用自定义 Service 来作为推送服务运行的载体。
在我的项目中

public class MessageCustomPushService extends PushService {}//在AndroidManifest中<service android:name=".pushservice.MessageCustomPushService"            android:exported="true"            android:label="PushService"            android:permission="android.permission.BIND_JOB_SERVICE"            android:process=":pushservice"//另一个过程            />

第五步:设置图标
具体可见个推集成文档
第六步:编写集成代码
1.初始化SDK
调用个推初始化代码PushManager.getInstance().initialize(Context context) 进行 SDK 的初始化。咱们倡议开发者在 Application.onCreate() 和主 Activity.onCreate() 办法中初始化个推 SDK。屡次调用 SDK 初始化并无影响。为了保障 SDK 服务稳固,举荐疏导用户受权相干的隐衷权限。
2.自定义接管推送服务事件

/** * 继承 GTIntentService 接管来自个推的音讯,所有音讯在线程中回调,如果注册了该服务,则务必要在 AndroidManifest 中申明,否则无奈承受音讯 */public class MessageReceiveIntentService extends GTIntentService { @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) {       }}<service    android:name="com.getui.demo.service.DemoIntentService"    android:permission="android.permission.BIND_JOB_SERVICE"/>

五:接口相干介绍
Tag[] tags=new Tag[]{};
PushManager.getInstance().setTag(Context context,Tag[] tags,String s);标签接口类,用于给用户打上标签(如能够用于精准推送)
等其余可见开发者文档
六:个推统计SDK集成
同上差不多,集成AppID

//1.从启动利用到敞开利用//2.从启动利用到利用退至后盾,且在后盾运行工夫超过 30s  GsConfig.setSessionTimoutMillis(20 * 60 * 1000); //开启开发者模式: GsConfig.setDebugEnable(isDebug); GsConfig.setInstallChannel(channel); //SDK 初始化 GsManager.getInstance().init(mApplication);

结尾:小时候想把头发梳成小孩儿模样,长大后才发现小孩儿其实没有什么头发