背景
很多时候,我们的APP需要接入接收推送的功能,市面上有许多提供推送服务的SDK,比如小米推送、极光推送、个推推送。由于各个厂商都希望减少后台进程,以提高系统的运行速度,所以推送服务进程很多时候会被停止,当然他们不会停止自己的推送服务,打比方说小米手机不会停止小米推送服务。所以大家集成推送SDK时,应多考虑市场占有率较大的手机,由于小米手机占有率较高,个人推荐小米推送。而公司服务端过去集成的是个推推送,以下就给大家说说集成个推推送要注意的问题。
集成个推
官网已提供比较详细的集成文档,这里不再过多叙述,我使用的是Android Studio集成步骤。
获取clientId为null的问题
在第一次安装应用打开第一个页面时,所获取clientId为null,我觉得这是个推的一个bug。必须是你在点击页面中的button,或者在其他页面获取时才不为null,这只能通过业务逻辑来进行解决了。如果有其他解决方案,欢迎在评论区里告诉我。
Receiver
此Receiver只会接收到获取CID信息和服务端推送的透传消息的广播。
<!-- 配置第三方Receiver -->
<receiver
<!-- 此处com.getui.demo.PushDemoReceiver,需要替换成开发者自己的BroadcastReceiver文件全名-->
android:name="com.getui.demo.PushDemoReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.igexin.sdk.action.${GETUI_APP_ID}" />
</intent-filter>
</receiver>
代码参考
以下是接受广播的Receiver代码,其中PlayLoadManager是处理业务的类,对各种情况进行不同的操作,比如APP已打开,在后台,未打开各种状态,透传消息传来,应该如何展示UI。
public class GeTuiReceiver extends BroadcastReceiver {
private final String TAG="GeTuiReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
switch (bundle.getInt(PushConsts.CMD_ACTION)) {
case PushConsts.GET_CLIENTID: //clientId
String clientId = bundle.getString("clientid");
Log.d(TAG,"clientId:"+clientId);
break;
case PushConsts.GET_MSG_DATA:
byte[] payload = bundle.getByteArray("payload"); //获取透传数据
if (payload != null) {
String message=new String(payload);
Log.d(TAG,"message:"+message);
PlayLoadManager.getInstance(context).dealWithMessage(context,message);
}
break;
default:
break;
}
}
}
透传消息测试
我发送一消息测试,应用收到后会弹出Notification,点击后打开链接,我使用的是PendingIntent.FLAG_CANCEL_CURRENT
{"type":"link","title":"透传title","id":"null","flag":"null","url":"http://www.baidu.com"}
以下为测试结果:
1.应用打开 【收到,正常打开链接】
2.应用按Back键退出,没有被回收【收到,正常打开连接】
3.应用进程被手动清理【收不到,打开APP才收到,然后正常打开】
4.应用按home键,没被回收【收到,点击打开白屏,按返回键,看见百度页面闪了一下,回到主页,有时跟1、2一样正常】
将应用开启为可自动运行,3、4两种情况都正常。
网友评论