Android集成推送

说起推送,这种第三方的平台很多,每个公司都可能用的不一样,之前我项目里都是用的Jpush,具体怎么配置就不多说了,不管用什么平台,就总结一点:集成的大体东西都基本一样。最近手头的这个项目用的是阿里云的移动推送。就简单说一下这个推送的集成。
不管哪个平台,大致都要先去注册应用,获取相应的appkey和appsecret。
正文:
第一步:用Maven快速集成进行配置。
文档地址:https://help.aliyun.com/document_detail/51056.html?spm=a2c4g.11186623.6.623.43da7fa8oUfFFH#h2–maven-1
进去照着配置就行了。就说一点:如果是快速集成(官方也建议采用此方式集成),Manifest不需要配置那些权限和其他相关组件配置,其他的不过多解释。
也就说清单文件只需要配置如下两项即可。

 <!-- 阿里云推送相关(配置appkey和appsecret) -->
        <meta-data
            android:name="com.alibaba.app.appkey"
            android:value="你的appkey" />
        <meta-data
            android:name="com.alibaba.app.appsecret"
            android:value="你的appsecret" />
        <!-- 消息接收监听器 (用户可自主扩展) -->
        <receiver
            android:name=".receiver.MyMessageReceiver"
            android:exported="false">
            <intent-filter>
                <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" />
            </intent-filter>
            <intent-filter>
                <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" />
            </intent-filter>
            <intent-filter>
                <action android:name="com.alibaba.sdk.android.push.RECEIVE" />
            </intent-filter>
        </receiver>

自定义一个MyMessageReceiver用来接收通知的接收和点击事件的相关处理。配置就算完成了。
第二步:初始化SDK
官方文档也说明了,初始化放在application中。如下:

private void initCloudChannel(AppApplication applicationContext) {
        PushServiceFactory.init(applicationContext);
        CloudPushService pushService = PushServiceFactory.getCloudPushService();
        pushService.register(applicationContext, new CommonCallback() {
            @Override
            public void onSuccess(String response) {
                Log.e(TAG, "init cloudchannel success");
//                Log.e("===id", pushService.getDeviceId() + "");
            }

            @Override
            public void onFailed(String errorCode, String errorMessage) {
                Log.e(TAG, "init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage);
            }
        });
    }

第三步:绑定推送标识
这个自行决定用什么字段作为推送的唯一标识,这里我用的是user_id。在获取到user_id的地方绑定即可。如下:

//阿里云推送绑定账户
PushServiceFactory.getCloudPushService().bindAccount(user_id, new CommonCallback() {
            @Override
            public void onSuccess(String s) {

            }

            @Override
            public void onFailed(String s, String s1) {

            }
        });

第四步:接收推送内容,处理点击事件
这个主要就是看Recriver了,就是上面定义的MyMessageReceiver,代码如下:

public class MyMessageReceiver extends MessageReceiver {

    /**
     * 接收到通知的回调
     */
    @Override
    public void onNotification(Context context, String title, String summary, Map<String, String> extraMap) {
        //8.0适配
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            NotificationChannel channel = new NotificationChannel("1", "name", NotificationManager.IMPORTANCE_HIGH);
            manager.createNotificationChannel(channel);
        }
    }

    /**
     * 点击通知的回调
     */
    @Override
    public void onNotificationOpened(Context context, String title, String summary, String extraMap) {
        try {
            JSONObject object = new JSONObject(extraMap);
            String param= object.optString("param");
            if (!TextUtils.isEmpty(param) ) {
                Intent intent = new Intent(context, XXXActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra("param", param);
                context.startActivity(intent);
            }
        } catch (JSONException ignored) {
        }
    }
}

这里要注意Android8.0通知的显示和点击事件问题,8.0以上必须要设置通知渠道才能正常显示通知,不然收到了通知也显示不出来。
适配8.0 的通知主要注意以下几点:
1:必须设置通知渠道和渠道name,都不可为空,缺一不可,不然不显示。
2:必须设置setSmallIcon,不然不显示。
3:设置setContentIntent一定要在notify之前。不然不显示。

关于推送参数的获取,可以通过extraMap来解析获取就可以了。然后添加到intent中传递到目标Activity即可。

还要额外注意一点:关于在跳转目标Activity中参数的接收。
生命周期有可能会走:onCreate,也有可能会走:onNewIntent。因此最好的方法就是先在这两个生命周期中,都定义好处理通知的方法dealNotice(Intent intent);,最后统一处理即可。

第五步:必要的时候进行解绑(比如退出登录了)

PushServiceFactory.getCloudPushService().unbindAccount(new CommonCallback() {
                @Override
                public void onSuccess(String s) {
                    Log.e("===unbindSuccess", s);
                }

                @Override
                public void onFailed(String s, String s1) {

                }
            });

在实际项目中,发送9.0的手机初始化就有问题,提示网络配置错误,让检查网络配置,这实际上就是阿里的推送没适配9.0系统的https网络安全。解决办法网上也是有的,很简单,如下:
清单文件的application节点下添加:

android:usesCleartextTraffic="true"
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值