腾讯信鸽推送AndroidSDK快速指南
信鸽Android SDK是⼀个能够提供Push服务的开发平台,提供给开发者简便、易⽤的API接⼝,⽅便快速接⼊。
⽬前⽀持Android 2.2及以上版本系统。
本⽂档将引导⽤户以最快的速度嵌⼊信鸽SDK。
注册&下载SDK
前往前台信鸽⾸页,使⽤QQ号码登陆,打开注册页⾯,填写“应⽤名称”和“应⽤包名”(必须要跟APP⼀致),选择“操作系统”和“分类”,最后点击“创建应⽤”。
应⽤创建成功后,点击“应⽤配置”即可看到APP专属的AccessId和AccessKey等信息。
10min demo regi.png
注册完成后,请下载最新版本的Android SDK到本地,并解压。
⼯程配置
以eclipse为开发的IDE为例,将SDK导⼊到⼯程的步骤为:
1、创建或打开Android⼯程(关于如何创建Android⼯程,请参照开发环境的章节)。
2、将信鸽 SDK⽬录下的libs⽬录所有⽂件拷贝到⼯程的libs(或lib)⽬录下。
3、选中libs(或lib)⽬录下的信鸽jar包,右键菜单中选择Build Path,选择Add to Build Path将SDK添加到⼯程的引⽤⽬录中。
4、打开l,添加以下配置(建议参考下载包的Demo修改),其中YOUR_ACCESS_ID和YOUR_ACCESS_KEY替换为APP对应的accessId和accessKey,请确保按照要求配置,否则可能导致服务不能正常使⽤。
<application
<!-- APP项⽬的其它配置... -->
<!-- 【必须】信鸽receiver⼴播接收 -->
<receiver
android:name="t.android.tpush.XGPushReceiver"
android:process=":xg_service_v2" >
<intent-filter android:priority="0x7fffffff" >
<!-- 【必须】信鸽SDK的内部⼴播 -->
<action android:name="t.android.tpush.action.SDK" />
<action android:name="t.android.tpush.action.INTERNAL_PUSH_MESSAGE" />
<!-- 【必须】系统⼴播:开屏和⽹络切换 -->
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="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="t.android.tpush.XGPushActivity"
android:exported="true" >
<intent-filter>
<!-- 若使⽤AndroidStudio,请设置android:name="android.intent.action"-->
<action android:name="" />
</intent-filter>
</activity>
<!-- 【必须】信鸽service -->
<service
android:name="t.android.tpush.service.XGPushService"
android:exported="true"
android:persistent="true"
android:process=":xg_service_v2" />
<!-- 【必须】通知service,此选项有助于提⾼抵达率 -->
<service
android:name="t.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" />
启动并注册App
完成⼯程配置后,打开⼯程的主Activity,在其onCreate(Bundle savedInstanceState)重载⽅法内,添加以下代码,完成信鸽服务的启动与APP注册过程。
// 开启logcat输出,⽅便debug,发布时请关闭
// ableDebug(this, true);
sdk// 如果需要知道注册是否成功,请使⽤registerPush(getApplicationContext(), XGIOperateCallback)带callback版本
// 如果需要绑定账号,请使⽤registerPush(getApplicationContext(),account)版本
// 具体可参考详细的开发指南
// 传递的参数为ApplicationContext
Context context = getApplicationContext();
// 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。
图:注册成功本地标签为“TPush”标签的logcat⽇志打印
10 min demo token.png
验证
前往信鸽前台,选择“创建通知”,输⼊“标题”和“内容”,点击“确认推送”。稍等⼏秒后,如果顺利的话,终端设备应该能够收到这条通知。图:前台下发通知界⾯
10min demo pushprocess.png
图:终端设备收到通知界⾯
10 min demo arrived.png
通过上⾯的接⼊,APP已经具备接收通知推送的能⼒。
当然,如果还需要更⾼级的功能,请继续阅读或参数《SDK开发指南》
通知的异常⾃查列表
信鸽的发布包都是经过严格测试的,遇到问题时,尤其是开发环境问题,建议先⾃⾏搜索⽹上解决⽅案。
常见的检查列表:
1.设备是否正常联⽹?
2.检查l是否配置正确?建议直接参考demo的例⼦改
2.1. accessId、accessKey设置是否与前台注册的⼀致?
2.2. 相关权限是否齐全?
2.3. receiver、service和activity相关组件是否配置好?
3.设备是否注册成功?
4.当前APP包名是否与前台注册的⼀致,如果不⼀致请在前台选中“使⽤多包名”选项?
5.前台下发通知时,“时段控制”选项⾥的时间段是否符合终端设备当前时间?
6.请根据“常见问题与解答”,看看是否有解决⽅案。
7.2.30及以上版本请检查xml配置⽂件是否添加t.android.tpush.XGPushActivity相关的内容
8.停留在后台的APP点击通知不能打开APP:被打开的activity(特别是LAUNCHER)启动模式为SingleTop,SingleTask或SingleInstance,请在该activity重载onNewIntent⽅法:
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);// 必须要调⽤这句
}
9.对于使⽤AndriodStudio的同学,若l编译不通过,XGPushActivity配置改为: <action
android:name="android.intent.action" />
10.请检查l是否已正确配置XGRemoteService,且intent-filter中是否正确设置: <action android:name="应⽤包
名.PUSH_ACTION" />,应⽤包名为当前APP包名,如demo
11.是否已设置APP默认的icon?由于系统原因,若没有icon,通知将不能展⽰。
12.(2.36之前的版本)已知MIUI V6上会禁⽤所有静态⼴播,若出现有类似的情况,请添加以下代码兼容该系统。
// 在isterPush(context)或其它版本的注册接⼝之后调⽤以下代码
// 使⽤ApplicationContext
Context context = getApplicationContext();
Intent service = new Intent(context, XGPushService.class);
context.startService(service);
13.点击通知,出现不能打开activity的情况,请在l中将XGPushActivity的exported属性设置为true。
14.点击通知,出现重复打开APP的情况,请将被打开的Activity启动模式改为SingleTop,SingleTask或SingleInstance。
15.点击通知,不希望触发activity被打开的动作,可以:1.推送时,填写⼀个不存在的页⾯名称;2.使⽤消息透传(命令字)推送,收到消息后,⾃⼰弹出通知。
如果还不能排查问题,请加⼊信鸽开发者技术QQ:333782566,会有专门的⼈员协助。
包冲突
1.jar包冲突:
如果提⽰jar包冲突,请删除冲突的包,保留⼀份即可,建议保留版本⾼的。
常见的冲突有:
1)MSDK与信鸽冲突:删除wup.jar
2)MTA与信鸽冲突:删除低版本的mid.jar
2. .so⽂件导⼊:.so⽂件是信鸽必须的组件,⽀持armeabi、armeabi-v7a、misp和x86平台,请根据⾃⼰当前.so⽀持的平台添加
1)如果你的项⽬中没有使⽤其它.so,建议复制四个平台⽬录到⾃⼰⼯程中
2)如果已有.so⽂件,只需要复制信鸽对应⽬录下的⽂件
3)若是MSDK接⼊的游戏,通常只需要armeabi⽬录下的.so
4)若当前⼯程已经有armeabi,那么只需要添加信鸽的armeabi下的.so,其它⽬录⽆需添加。其它情况类似,只添加当前平台存在的平台即可。
代码混淆
如果你的项⽬中使⽤proguard等⼯具做了代码混淆,请保留以下选项,否则将导致信鸽服务不可⽤。
-keep public class * extends android.app.Service
-keep public class * t.BroadcastReceiver
-keep t.android.tpush.**  {* ;}
-keep t.mid.**  {* ;}
关于抵达量/点击量和⾃定义key-value的统计
2.30及以上版本
2.30及以上版本:使⽤信鸽SDK内置的activity展⽰页⾯,默认已经统计通知/消息的抵达量、通知的点击和清除动作。但如果开发者要监听这些事件,可参考“Android SDK开发指南”中的“【2.30及以上版本】通知效果监听和⾃定义key-value”章节。
@Override
protected void onResume() {
XGPushClickedResult click = ActivityStarted(this);
if (click != null) { // 判断是否来⾃信鸽的打开⽅式
// 根据实际情况处理...
// 如获取⾃定义key-value
}
}
同理,ActivityStoped(this)由onStop()改为onPause()内调⽤,即:
@Override
protected void onPause() {
}
注意:
1)需要将onActivityStarted和onActivityStoped嵌⼊到所有可能被打开的activity,建议所有activity都加上。
2)如果被打开的activity启动模式为SingleTop,SingleTask或SingleInstance,请根据以下在该activity重载onNewIntent⽅法:
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);// 必须要调⽤这句
}
通知在通知栏被点击或清除时的回调,即⾃定义Receiver(需重载XGPushBaseReceiver)的 onNotif
actionClickedResult重载⽅法中区分点击和清除动作,XGPushClickedResult添加 getActionType(),其中XGPushClickedResult.NOTIFACTION_CLICKED_TYPE表⽰点击操作,XGPushClickedResult.NOTIFACTION_DELETED_TYPE表⽰清除操作。即:
@Override
public void onNotifactionClickedResult(Context context,
XGPushClickedResult message) {
if (context == null || message == null) {
return;
}
if (ActionType() == XGPushClickedResult.NOTIFACTION_CLICKED_TYPE) {
// 通知在通知栏被点击啦。。。。。
// APP⾃⼰处理点击的相关动作
// 这个动作可以在activity的onResume也能监听,请看第3点相关内容
} else if (ActionType() == XGPushClickedResult.NOTIFACTION_DELETED_TYPE) {
// 通知被清除啦。。。。
// APP⾃⼰处理通知被清除后的相关动作
}
}
2.30版本之前
2.0/2.1x/2.2x版本:SDK默认统计通知/消息的抵达量,但对于点击量和⾃定义key-value,需要所有activity的 onStart重载⽅法中调⽤ActivityStarted(this);才能统计,具体请参考“Android SDK开发指南”中的“【2.30以前版本】通知打开效果和⾃定义key-value”章节

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。