集成第三方组件--个推

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

猜你喜欢

转载自blog.csdn.net/primer01/article/details/53080917