美文网首页
集成个推推送

集成个推推送

作者: 我想吃碗牛肉面 | 来源:发表于2018-08-07 14:59 被阅读161次

    背景
    很多时候,我们的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两种情况都正常。

    相关文章

      网友评论

          本文标题:集成个推推送

          本文链接:https://www.haomeiwen.com/subject/grqavftx.html