一、快速上手
第一步:引入SDK
下载android-SDK,解压,引入AS,这里要注意的是,先切换到project项目结构下,把jar文件引入到libs(该文件夹无需新建,与src同级)文件夹下。这里有个坑,信鸽的SDK中带有一个support-v4包,如果原项目中用到v4包了,这里就不要再引入了,否则会发生冲突!
然后在src/main下新建一个文件夹,名叫『jniLibs』(必须叫这个名字,其他名字无效),把所有的.so文件连同.so文件所在的文件夹一起粘贴到jniLibs文件夹下。
第二步:修改manifests文件
<application
<!-- APP项目的其它配置... -->
<!-- 【必须】 信鸽receiver广播接收 -->
<receiver
android:name="com.tencent.android.tpush.XGPushReceiver"
android:process=":xg_service_v2" >
<intent-filter android:priority="0x7fffffff" >
<!-- 【必须】 信鸽SDK的内部广播 -->
<action android:name="com.tencent.android.tpush.action.SDK" />
<action android:name="com.tencent.android.tpush.action.INTERNAL_PUSH_MESSAGE" />
<!-- 【必须】 系统广播:开屏和网络切换 -->
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<!-- 【可选】 一些常用的系统广播,增强信鸽service的复活机会,请根据需要选择。当然,你也可以添加APP自定义的一些广播让启动service -->
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>
<!-- 【必须】 (2.30及以上版新增)展示通知的activity -->
<!-- 【注意】 如果被打开的activity是启动模式为SingleTop,SingleTask或SingleInstance,请根据通知的异常自查列表第8点处理-->
<activity
android:name="com.tencent.android.tpush.XGPushActivity"
android:exported="false" >
<intent-filter>
<!-- 若使用AndroidStudio,请设置android:name="android.intent.action"-->
<action android:name="" />
</intent-filter>
</activity>
<!-- 【必须】 信鸽service -->
<service
android:name="com.tencent.android.tpush.service.XGPushService"
android:exported="true"
android:persistent="true"
android:process=":xg_service_v2" />
<!-- 【必须】 通知service,此选项有助于提高抵达率 -->
<service
android:name="com.tencent.android.tpush.rpc.XGRemoteService"
android:exported="true" >
<intent-filter>
<action android:name="应用包名.PUSH_ACTION" />
</intent-filter>
</service>
<!-- 【必须】 请将YOUR_ACCESS_ID修改为APP的AccessId,“21”开头的10位数字,中间没空格 -->
<meta-data
android:name="XG_V2_ACCESS_ID"
android:value="YOUR_ACCESS_ID" />
<!-- 【必须】 请将YOUR_ACCESS_KEY修改为APP的AccessKey,“A”开头的12位字符串,中间没空格 -->
<meta-data
android:name="XG_V2_ACCESS_KEY"
android:value="YOUR_ACCESS_KEY" />
</application>
<!-- 【必须】 信鸽SDK所需权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 【可选】 信鸽SDK所需权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BATTERY_STATS" />
这里要注意把accessID和accessKey替换成自己的!
<!-- 【必须】 请将YOUR_ACCESS_ID修改为APP的AccessId,“21”开头的10位数字,中间没空格 -->
<meta-data
android:name=
"XG_V2_ACCESS_ID"
android:value=
"YOUR_ACCESS_ID"
/>
<!-- 【必须】 请将YOUR_ACCESS_KEY修改为APP的AccessKey,“A”开头的12位字符串,中间没空格 -->
<meta-data
android:name=
"XG_V2_ACCESS_KEY"
android:value=
"YOUR_ACCESS_KEY"
/>
还要改一下这里:
<!-- 【必须】 通知service,此选项有助于提高抵达率 -->
<service
android:name=
"com.tencent.android.tpush.rpc.XGRemoteService"
android:exported=
"true"
>
<intent-filter>
<action android:name=
"应用包名.PUSH_ACTION"
/>
</intent-filter>
</service>
和这里:
<!-- 【必须】 (2.30及以上版新增)展示通知的activity -->
<!-- 【注意】 如果被打开的activity是启动模式为SingleTop,SingleTask或SingleInstance,请根据通知的异常自查列表第8点处理-->
<activity
android:name=
"com.tencent.android.tpush.XGPushActivity"
android:exported=
"false"
>
<intent-filter>
<!-- 若使用AndroidStudio,请设置android:name=
"android.intent.action"
-->
<action android:name=
""
/>
</intent-filter>
</activity>
第三步:注册App
完成工程配置后,打开工程的主Activity,在其onCreate(Bundle savedInstanceState)重载方法内,添加以下代码,完成信鸽服务的启动与APP注册过程。
// 开启logcat输出,方便debug,发布时请关闭
// XGPushConfig.enableDebug(this, true);
// 如果需要知道注册是否成功,请使用registerPush(getApplicationContext(), XGIOperateCallback)带callback版本
// 如果需要绑定账号,请使用registerPush(getApplicationContext(),account)版本
// 具体可参考详细的开发指南
// 传递的参数为ApplicationContext
Context context = getApplicationContext();
XGPushManager.registerPush(context);
// 2.36(不包括)之前的版本需要调用以下2行代码
Intent service = new Intent(context, XGPushService.class);
context.startService(service);
// 其它常用的API:
// 绑定账号(别名)注册:registerPush(context,account)或registerPush(context,account, XGIOperateCallback),其中account为APP账号,可以为任意字符串(qq、openid或任意第三方),业务方一定要注意终端与后台保持一致。
// 取消绑定账号(别名):registerPush(context,"*"),即account="*"为取消绑定,解绑后,该针对该账号的推送将失效
// 反注册(不再接收消息):unregisterPush(context)
// 设置标签:setTag(context, tagName)
// 删除标签:deleteTag(context, tagName)
代码嵌入完成后,启动APP,如果在logcat中的TPush标签看到以下类似的输出,说明已经注册成功,并返回token。
注意:
Android Token长度为40位
iOS Token长度为64位
在这里,可以在logcat中直接搜索『Token』字段查找出来,如果能找到,就代表android端已成功配置信鸽!
接下来启动app,在信鸽的管理后台发个推送试一试吧~
目前测试结果:分别在红米1S和tcl两部手机上测试,只要App处于运行中,后后台运行,就可接受到推送。但是一旦用活动管理器强制终止App的活动线程,就不能接收到推送了。官方的解释是:
service被终止后,由系统、安全软件和用户操作限定是否能够再次启动。
信鸽SDK通过唯一的service与信鸽后台保持通讯,在android中,service被杀死后在没有被系统/安全软件禁止的条件下是能够自启动的,具体可自行网上搜索“android service onstartcommand START_STICKY”
目前,在某些定制的系统(如MIUI)或被安全软件禁止自启动后,只有用户再次打开APP才能重启信鸽service
信鸽service何时能够启动由系统调度确定
在锁屏触屏、网络切换、安装APP、系统重启等条件,信鸽会主动尝试启动service。
二、分类推送
如何区分目标人群,做分类推送?To be continue ...