最近公司产品想要提高用户体验,便让我研究一下华为推送的问题。其实推送最重要的就是进程保活的这个问题,这是一个比较棘手的问题。现在比较普遍的做法是集成多个厂商的推送,例如小米,华为,魅族推送等,再加一个另外的第三方推送(个推,极光,信鸽)。今天主要讲的是华为推动接入的一些步骤和问题,而接入的版本是hms 2.5.2.300。

1、注册成为华为开发者

https://hwid1.vmall.com/CAS/portal/userRegister/regbyemail.html?service=https%3A%2F%2Flogin.vmall.com%2Foauth2%2Fv2%2Fauthorize%3Fresponse_type%3Dtoken%26client_id%3D6099200%26state%3D93235025%26redirect_uri%3Dhttp%253A%252F%252Fdeveloper.huawei.com%252Fdevunion%252FopenPlatform%252Fhtml%252FhandleLogin.html%253Fp%253Dhttp%25253A%25252F%25252Fdeveloper.huawei.com%25252Fdevunion%25252Fui%25252Fdevplan.html&loginChannel=89000000&reqClientType=89
这里面是需要进行实名制登记注册,身份证照片还有手持身份证照片什么的,审核大概一天左右就OK了

2、添加应用以及点亮HMS权益

创建应用:

然后申请push权益服务

3、集成SDK

android studio集成的方法是Gradle+maven
1、打开项目的build.gradle–>allprojects–>repositories配置maven仓库

2、添加项目依赖,在子项目的build.gradle–>dependencies

其中2.5.2.300是版本号,以后有更新的版本出来,就直接在这里改就好了
然后sync一下,这样子就已经集成完毕了,是不是很方便呢ヽ( ̄▽ ̄)ノ

4、配置manifest

(1)添加权限

(2)添加APPID

(3)添加一些特定的activity(跳转所需的透明页面)和provider(读取升级文件)

(4)添加两个receiver,用来接收广播信息

(5)添加混淆
proguard-rules.pro文件添加
-keep class com.huawei.hms.**{*;}

(6)配置签名
因为hms平台上的应用要签名的SHA256指纹,在android studio上就可以获取,只需要在Terminal上输入keytool -list -v -keystore 签名地址 ,再输入密钥的密码就OK了

通过以上的步骤,准备工作就已经差不多了,剩下就是连接华为移动服务了

客户端开发

1、连接华为移动服务

在Activity的onCreate方法里面添加,同时实现ConnectionCallbacks, OnConnectionFailedListener两个接口

//创建华为移动服务client实例用以使用华为push服务
//需要指定api为HuaweiId.PUSH_API
//连接回调以及连接失败监听
client = new HuaweiApiClient.Builder(this).addApi(HuaweiPush.PUSH_API).addConnectionCallbacks(this).addOnConnectionFailedListener(this).build();
//建议在oncreate的时候连接华为移动服务
//业务可以根据自己业务的形态来确定client的连接和断开的时机,但是确保connect和disconnect必须成对出现
client.connect();                   
@Override
public void onConnected() {//华为移动服务client连接成功,在这边处理业务自己的事件Log.i(TAG, "HuaweiApiClient 连接成功");
}@Override
public void onConnectionSuspended(int arg0) {//HuaweiApiClient断开连接的时候,业务可以处理自己的事件Log.i(TAG, "HuaweiApiClient 连接断开");client.connect();
}@Override
public void onConnectionFailed(ConnectionResult arg0) {Log.i(TAG, "HuaweiApiClient连接失败,错误码:" + arg0.getErrorCode());
}@Override
protected void onDestroy() {super.onDestroy();//建议在onDestroy的时候停止连接华为移动服务//业务可以根据自己业务的形态来确定client的连接和断开的时机,但是确保connect和disconnect必须成对出现client.disconnect();
}

2、获取token

当连接成功之后,就要去获取token。华为官方提供了两种方法获取token,分别是同步和异步获取,但是我们通常习惯性都是用异步的方法获取

/*** 使用异步接口来获取pushtoken* 结果通过广播的方式发送给应用,不通过标准接口的pendingResul返回* CP可以自行处理获取到token* 同步获取token和异步获取token的方法CP只要根据自身需要选取一种方式即可*/
private void getTokenAsyn() {if(!client.isConnected()) {Log.i(TAG, "获取token失败,原因:HuaweiApiClient未连接");return;}PendingResult<TokenResult> tokenResult = HuaweiPush.HuaweiPushApi.getToken(client);tokenResult.setResultCallback(new ResultCallback<TokenResult>() {@Overridepublic void onResult(TokenResult result) {//这边的结果只表明接口调用成功,是否能收到响应结果只在广播中接收,广播这块后面会有讲到}   });
}

3、自定义广播,获取token,push连接状态

/*** 应用需要创建一个子类继承com.huawei.hms.support.api.push.PushReceiver,* 实现onToken,onPushState ,onPushMsg,onEvent,这几个抽象方法,用来接收token返回,push连接状态,透传消息和通知栏点击事件处理。* onToken 调用getToken方法后,获取服务端返回的token结果,返回token以及belongId* onPushState 调用getPushState方法后,获取push连接状态的查询结果* onPushMsg 推送消息下来时会自动回调onPushMsg方法实现应用透传消息处理。本接口必须被实现。 在开发者网站上发送push消息分为通知和透传消息*           通知为直接在通知栏收到通知,通过点击可以打开网页,应用 或者富媒体,不会收到onPushMsg消息*           透传消息不会展示在通知栏,应用会收到onPushMsg* onEvent 该方法会在设置标签、点击打开通知栏消息、点击通知栏上的按钮之后被调用。由业务决定是否调用该函数。*/
public class HuaweiPushRevicer extends PushReceiver {public static final String TAG = "HuaweiPushRevicer";@Overridepublic void onToken(Context context, String token, Bundle extras) {String belongId = extras.getString("belongId");Log.i(TAG, "belongId为:" + belongId);Log.i(TAG, "Token为:" + token);System.out.println("Token为:" + token);}@Overridepublic boolean onPushMsg(Context context, byte[] msg, Bundle bundle) {try {//CP可以自己解析消息内容,然后做相应的处理String content = new String(msg, "UTF-8");Log.i(TAG, "收到PUSH透传消息,消息内容为:" + content);} catch (Exception e) {e.printStackTrace();}return false;}public void onEvent(Context context, Event event, Bundle extras) {Intent intent = new Intent();intent.setAction(ACTION_UPDATEUI);intent.putExtra("type", 3);intent.putExtra("pushMsg", "收到通知栏消息点击事件");context.sendBroadcast(intent);if (Event.NOTIFICATION_OPENED.equals(event) || Event.NOTIFICATION_CLICK_BTN.equals(event)) {int notifyId = extras.getInt(BOUND_KEY.pushNotifyId, 0);Log.i(TAG, "收到通知栏消息点击事件,notifyId:" + notifyId);Toast.makeText(context,"通知栏点击事件",Toast.LENGTH_LONG).show();if (0 != notifyId) {NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);manager.cancel(notifyId);}}String message = extras.getString(BOUND_KEY.pushMsgKey);super.onEvent(context, event, extras);}@Overridepublic void onPushState(Context context, boolean pushState) {Log.i("TAG", "Push连接状态为:" + pushState);}
}

最后,还要安装华为移动服务,就可以使用了。

效果演示

补充

1、有的时候经常错误码是6003,这个是比较普遍的错误,通常都是没有配置sha256签名,或者说安装的app没有安装对应的签名
2、不能获取token,要把应用和华为移动服务的自启动权限打开;而在非华为手机上,例如我测试的这台,有可能是有广播限制,就是因为有酷狗app,所以广播被限制了,卸载了就好。
3、如果还有问题的话,可以自己去拉取一下log,方法为:
第一步: adb shell setprop log.tag.hwpush VERBOSE
第二步: adb logcat –v time > D:\hwpush.log
抓日志前,先关闭应用,到抓日志的时候,在命令行输入以上两句,然后点击应用,一直到点击申请devicetoken之后过几秒,关闭命令行,那么在D盘上就可以看到一个hwpush.log的文件,查看关键字“pushlog”进行分析。

更详细的可以到官网查看对应的文档:http://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush.html?page=hmssdk_huaweipush_devguide

android接入华为推送相关推荐

  1. Android接入华为推送详细步骤

    由于极光推送的到达率不高,所以项目重要集成个推,进行华为推送和小米推送 前提:先说下Mainfest文件中需要的配置,可以参考相关文件 <!--HMS-SDK引导升级HMS功能,访问OTA服务器 ...

  2. Android - 集成华为推送

    Android ~ 集成华为推送 功能流程如下图所示: 开发流程 一.配置AppGallery Connect 1.注册成为开发者 注册 实名认证 2.创建应用 创建项目 在项目下添加应用 3.生成签 ...

  3. Android集成华为推送功能详细

    1.前言 Android集成推送功能也算是有好几个SDK了,包括极光.个推.小米.百度云推送.但是真心感觉华为的文档写的太差,封装的也不好,别的开发文档看一两遍就能按照文档集成成功,而华为仔细看了几遍 ...

  4. Android 集成华为推送,集成小米推送,集成OPPO推送,集成vivo推送

    最近有时间在我们的应用中集成了华为,小米,OPPO,vivo四大平台的推送,一切顺利. 这里做一个记录, 开撸: 一.华为推送 1.下载HMS Agent套件,解压如下: 找到GetHMSAgent_ ...

  5. Android集成华为推送教程

    前言 目前Android应用在后台杀死进程之后,就收不到通知了,想要接收消息推送,需要集成各个厂商的推送SDK,本次讲解华为集成最新教程 1.配置AppGallery Connect 1)注册成为开发 ...

  6. Android接入极光推送,接入华为,小米,OPPO,VIVO厂商通道

    极光推送作用: 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度.提高应用的留存率 主要作用: 保持与服 ...

  7. MobPush接入华为推送离线接收不到

    1.mob故障排查 查看token是否为空 token是华为sdk传递给mobsdk的 2.添加 service <serviceandroid:name="com.mob.pushs ...

  8. Unity3D Android接入FCM推送

    本来以为推送是个很简单的功能,碰了之后才知道是个天坑,谁踩坑谁.这篇帖子会简要提供测试过的坑,如果只想看FCM可以跳到第二部分. 一,目前Unity3D有三种推送方式, 1,用官方自带的插件,包管理器 ...

  9. 华为android下载地址,解决Android 华为推送库下载不了

    问题:华为库下载不了,导致gradle同步失败 解决: 去掉华为推送在线下载相关代码,将在线下载修改为离线加载aar库 1.通过Maven 仓库离线包下载地址下载关于推送的包: http://deve ...

最新文章

  1. HJ0427分隔输出
  2. 页面浏览事件之 $AppViewScreen 全埋点
  3. 抄作业了!6 大 Flask 开源实战项目推荐
  4. 原创:微信小程序源码解说:石头剪刀布(附源码下载)
  5. Sql Server之旅——第二站 理解讨厌的表扫描
  6. asp.net core MVC 过滤器之ActionFilter过滤器(二)
  7. guava 并发同步_Google Guava –与Monitor同步
  8. 理解Caffe的网络模型
  9. 不使用Ajax,如何实现表单提交不刷新页面
  10. C#LeetCode刷题-设计
  11. 补习系列(14)-springboot redis 整合-数据读写
  12. 离散域下的泊松方程求解(python实现)
  13. Linux安装libmodbus库
  14. [bzoj3812]主旋律
  15. 淘宝四大经典骗局及防骗技巧
  16. 如何过滤出已知当前目录下/llj中的所有一级目录?
  17. 广义表C/C++实现详解
  18. android 轮询框架,Android 轮询总结
  19. 阿里云独享虚拟主机和共享虚拟主机区别对比
  20. flink sql报错:Bang equal ‘!=‘ is not allowed under the current SQL conformance level

热门文章

  1. 新编计算机英语第2版,新编计算机英语-电子教案2.ppt
  2. 一款可以排查重复照片,清理多余照片的照片管理软件,使用PowerPhotos的图像浏览器快速查看照片
  3. 计算机科学与技术学校学科评估,计算机科学与技术学科评估具体排名「大学专业排名」...
  4. 二手交易平台/二手交易系统/闲置物品交易系统
  5. 二三类户开户风险和交易风险再讲
  6. window 10中 administrator用户获取管理员权限
  7. SQL笔试:Student学生表,Course 课程表,Sc选课表
  8. 微信小程序实现图片预览的功能
  9. APR协议及RARP协议
  10. asp.net html silverlight 传参数,Silverlight和ASP.NET相互传参的两种常用方式(QueryString,Cookie)...