失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > android接入华为推送

android接入华为推送

时间:2024-05-23 22:40:57

相关推荐

android接入华为推送

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

1、注册成为华为开发者

/CAS/portal/userRegister/regbyemail.html?service=https%3A%2F%%2Foauth2%2Fv2%2Fauthorize%3Fresponse_type%3Dtoken%26client_id%3D6099200%26state%3D93235025%26redirect_uri%3Dhttp%253A%252F%%252Fdevunion%252FopenPlatform%252Fhtml%252FhandleLogin.html%253Fp%253Dhttp%25253A%25252F%%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();

@Overridepublic void onConnected() {//华为移动服务client连接成功,在这边处理业务自己的事件Log.i(TAG, "HuaweiApiClient 连接成功");}@Overridepublic void onConnectionSuspended(int arg0) {//HuaweiApiClient断开连接的时候,业务可以处理自己的事件Log.i(TAG, "HuaweiApiClient 连接断开");client.connect();}@Overridepublic void onConnectionFailed(ConnectionResult arg0) {Log.i(TAG, "HuaweiApiClient连接失败,错误码:" + arg0.getErrorCode());}@Overrideprotected 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”进行分析。

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

如果觉得《android接入华为推送》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。