android 小米,华为,百度推送封装(QJPushService 使用)

xiaoxiao2021-02-28  127

前:本文为QiaoJim原创,转载请附原文链接,谢谢合作!

http://blog.csdn.net/qiao_jim/article/details/77742936

----------------------------------------------------------------------------------

上一篇博客android小米,华为,百度Push封装(准备阶段)

介绍了如何快速复制粘贴,查找替换,将小米,华为,百度 push 服务接入到app项目中。

这篇博文就在准备阶段的基础上,使用封装的 QJPushService 来达到真正实现消息推送的功能。

jar包下载地址 QJPushManager_1.1.jar(在我github项目的 /app 目录下)

这篇博文主要介绍使用封装后的 QJPushService,来简化消息推送的实现过程,个人感觉官方给的有些功能在一般的项目里,不是很常用。

所以就将3家的push简单封装了一下。按照以下步骤,可以控制:推送消息到达的逻辑,通知栏点击的逻辑,推送服务错误的逻辑。

如果大家项目需求还需要在其他时期自定义逻辑,详细使用请参考 push 官方提供的文档。

一、开始使用

1、一个 QJPushListener.QJHuaweiListener 的实现类,建议为项目的 BaseActivity,接口实现直接复制下方给出的代码

@Override public void onUpdateFailed(@NonNull ConnectionResult connectionResult) { Log.w("QJHuaweiListener", "onUpdateFailed, " + connectionResult.getErrorCode() + ""); } @Override public void onConnected() { Log.i("QJHuaweiListener", "onConnected, IsConnected: " + QJPushManager.getHuaweiClient().isConnected()); // 已连接,获取华为push唯一标识token if (QJPushManager.getHuaweiClient().isConnected()) { QJPushManager.getHuaweiToken(); } } @Override public void onConnectionSuspended(int i) { Log.i("QJHuaweiListener", "onConnectionSuspended, cause: " + i + ", IsConnected: " + QJPushManager.getHuaweiClient().isConnected()); } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { Log.w("QJHuaweiListener", "onConnectionFailed, " + connectionResult.getErrorCode() + ""); // 如果连接错误,判断是否可处理 final int errorCode = connectionResult.getErrorCode(); final HuaweiApiAvailability availability = HuaweiApiAvailability.getInstance(); if (availability.isUserResolvableError(errorCode)) { // 用户端解决错误 availability.resolveError(this, errorCode, QJConstant.REQUEST_RESOLVE_HUAWEI_ERROR, impl); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == QJConstant.REQUEST_RESOLVE_HUAWEI_ERROR) { final int errorCode = HuaweiApiAvailability.getInstance().isHuaweiMobileServicesAvailable(this); // 错误处理成功 if (errorCode == ConnectionResult.SUCCESS) { // 获取华为client,并尝试连接 HuaweiApiClient client = QJPushManager.getHuaweiClient(); if (!client.isConnecting() && !client.isConnected()) { client.connect(); } } else { // TODO: 处理errorCode } } }

2、new HuaweiListenerImpl(),然后调用其实例的 setQJListeneer(),传入 1 中的接口实现类

impl = new HuaweiListenerImpl(); // 设置 QJPushListener.QJHuaweiListener 实现 impl.setQJListener(BaseActivity.this);

3、设置申请3家服务的信息,传入的值详见注释即可,最后调用 QJPushManager.startPushService()即完成消息推送的功能

说明:开启服务后,app端已经能通过3家 push 提供的控制台进行消息推送了。如果需要进一步,获取推送拿到的标题,正文,附加值,

请接着往下看,只需再实现3个接口即可。

/* * context - 建议传入getApplicationContext() * flag - true为自动设置手机 IMEI 号为用户标签 */ QJPushManager.prepare(getApplicationContext(), true); /* * appId - 申请的小米push的 app id * appKey - 申请的小米push的 app key */ QJPushManager.prepareMi("2882303761517585298", "5531758546298"); /* * appKey - 申请的百度push的 api key */ QJPushManager.prepareBaidu("dtHgWqOiGR1EqoWHF7rlSCwy"); /* * listener - HuaweiListenerImpl 实例 */ QJPushManager.prepareHuawei(impl); // 开启推送 QJPushManager.startPushService();

4、开启推送时,注册 QJPushReceiver,建议在 BaseActivity 的 onCreate()方法中

再实现 QJPushListener 接口即可控制以下逻辑:(1)推送消息到达;(2) 通知栏点击;(3)错误处理

说明:

(1)QJMessage 有3个字段,title为推送的标题,body为消息正文,extra为附加值,通过get方法获取即可

(2)在 onDestroy()中调用 QJBroadcastUtil.unregQJReceiver(context , receiver) 注销QJPushReceiver

receiver = new QJPushReceiver(); /* * 分别传入 Context, QJPushReceiver的实例, QJPushListener的实现类 */ QJBroadcastUtil.regQJReceiver(this, receiver, this); @Override public void onMsgArrived(QJMessage msg) { Toast.makeText(this, msg.getBody(), Toast.LENGTH_SHORT).show(); } @Override public void onNotificationClicked(QJMessage msg) { Toast.makeText(this, msg.getBody(), Toast.LENGTH_SHORT).show(); } @Override public void onError() { Toast.makeText(this, "出现错误", Toast.LENGTH_SHORT).show(); }

5、其他说明

(1)如果开发者使用手机 IMEI 作为推送标识符,6.0以上需要运行时授权READ_PHONE_STATE

(2)QJPushManager.stopPushService()可停止服务,一般不需使用

(3)QJPushManager.getRomType()可获取手机类型,返回String为“Xiaomi”,“Huawei”,“Other”之一

(4)QJPushManager.getIMEI()可获取手机IMEI号

6、小米push自定义部分,以下均为QJPushManager的静态方法:

void setMiTag(String tag) void setMiAlias(String alias) void setMiAccount(String account) void deleteMiTag(String tag) void deleteMiAlias(String alias) void deleteMiAccount(String account)

7、百度push自定义部分以下均为QJPushManager的静态方法:

void setBaiduTag(List<String> tag) void deleteBaiduTag(List<String> tag) void listBaiduTag()

8、华为push相关以下均为QJPushManager的静态方法:

HuaweiApiClient getHuaweiClient() void getHuaweiToken()

转载请注明原文地址: https://www.6miu.com/read-26501.html

最新回复(0)