200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 华为推送服务(Push)

华为推送服务(Push)

时间:2020-10-30 03:17:40

相关推荐

华为推送服务(Push)

Huawei PUSH(华为推送服务)是华为为开发者提供的消息推送平台

1.华为服务简介

是什么华为推送服务?

云端终端的消息推送通道。PUSH通道拥有高到达率,推送速度每秒最高可达百万级,消息量每日百亿级,并且支持实时消息回执

存在或提供该服务意义?

可以将最新信息即时通知用户,构筑良好的用户关系,提升用户的感知度和活跃度

开发者需要做什么?

开发者通过在APP服务器端调用PUSH接口,向Huawei PUSH平台发送推送消息

Huawei PUSH平台将消息发给安装了相应APP的终端设备

2.华为服务功能

2.1终端设备收到消息的形式有?

Huawei PUSH可发送两种类型的消息给终端:通知栏消息和透传消息

2.2PUSH主要功能

支持单发群发机制,可以一次给一个或者多个用户发送PUSH消息当终端用户不在线时,支持消息缓存能力(消息缓存是指当消息到达华为PUSH平台后,如果设备不在线华为PUSH平台会将消息缓存起来,等到设备上线后华为PUSH平台会将缓存的消息再次推送给用户。如果用户很长时间不在线,这些缓存的消息默认保存24小时,最大保存15天,超期的消息会被PUSH平台丢弃)支持实时消息回执支持通知栏消息和透传消息两种方式。华为推荐用户尽量使用通知栏消息

2.3通知栏或透传消息区别?

终端用户点击对应的通知栏消息触发相应的动作,如打开应用、打开一个网页、打开应用内某界面透传消息由开发者的APP自主解析自定义内容,并触发相关动作,华为PUSH仅仅提供通道能力。利用此功能开发者可以实现好友邀请、IP呼叫等功能

2.4华为推荐用户尽量使用通知栏消息的原因?

通知栏消息的优势如下

降低PUSH业务的功耗

传统的Push功能都需要应用的进程存在时才能显示通知栏消息,但是应用进程很难常驻在系统,一般系统出于功耗的考虑会停止后台长时间没有活动的进程,这种情况下当收到通知栏消息需要展示时就需要拉起应用进程,频繁的操作会增加耗电影响手机续航能力通知栏消息到达率通常比透传消息高(不受低功耗方案对广播拉起应用的限制)

2.5消息送达率如何?

影响PUSH消息送达率的因素有

终端设备是否在线用户手机上集成HMS SDK的应用是否被卸载移动网络是否稳定终端手机的安全控制策略不同终端厂商设备的支持度

2.6不同终端平台对PUSH消息的限制?

原则上安装了HMS APK(华为移动服务)的Android终端设备即可支持华为PUSH业务

华为Android终端设备(设备出厂自带HMS APK)

Tips:华为手机管家可以拦截Android广播消息,Push消息因此也会被拦截

非华为Android手机(小米、VIVO、OPPO、三星、酷派、中兴等)

Tips:需要终端设备先安装HMS APK。 某些厂商手机可能会删除华为进程,导致消息不可达

2.7PUSH消息大小限制

PUSH消息支持的Android APP包名称最大为128个字节,消息内容最大限制为4K(不包括Token)

2.8PUSH消息流控限制

目前华为PUSH服务会对如下两个场景进行流控

服务端申请Access Token

开发者应用服务器短时间内频繁申请Access Token会被网关流控,返回error=6错误码

服务端发送PUSH消息api.

开发者应用服务器短时间内发送大量的推送消息会被流控,返回HTTP503状态码

2.9华为PUSH开放API认证方式

目前华为PUSH的开放API存在两种鉴权模式

用户级鉴权模式

开发者使用开发者帐号登录华为开发者联盟后,使用PUSH控制台进行通知消息发送时采用用户级鉴权模式

Tips:PUSH控制台是华为为开发者提供的PUSH消息发送测试平台,可以在线编辑并发送PUSH消息用于测试应用是否正确集成Push服务

应用级鉴权模式

开发者在应用服务器调用开放API发送的通知消息采用的是基于应用的鉴权模式,在使用前必须获取对应级别的Access Token才能进行正常的消息下发

2.10自定义通知渠道

通知渠道(channel)是Android O版本引入的新功能,意在解决如下问题:

应用的通知越来越多,给用户造成明显打扰。华为手机系统EMUI 10.0之前仅有一个“默认通知”渠道,无法做通知消息呈现方式的定制。

华为手机系统从EMUI 10.0开始新增了三个通知渠道(服务提醒,普通通知与营销通知)来实现不同级别(重要与一般)的通知消息展示。

3.使用华为Push场景介绍

开发一个APP产品,通过接入华为PUSH服务,用来实现如下功能:

推送最新消息至消费者终端上的APP消费者点击消息可实现如下3个场景

1.用户点击通知栏消息后打开指定APP

2.用户点击通知栏消息后跳转指定网页

3.用户点击通知栏消息后跳转APP的某个指定页面

4.华为Push集成之前需要做的

官方集成文档:华为推送服务

准备工作

注册认证成为开发者创建产品和应用开通推送服务获取推送服务参数下载SDK推送配置等集成工程

详情可参考:点我查看

接下来梳理集成步骤

在开发应用前,需要在AppGallery Connect中配置相关信息

注册成为开发者(开通Push服务)

推送配置等,例如:集成HMS Core SDK

agconnect-services.json文件拷贝到应用级根目录下

配置HMS Core SDK的Maven仓地址

打开Android Studio项目级“build.gradle”文件

buildscript {repositories {google()jcenter()// 配置HMS Core SDK的Maven仓地址。maven {url '/repo/'}}dependencies {...// 增加agcp配置。classpath 'com.huawei.agconnect:agcp:1.4.1.300'}}allprojects {repositories {google()jcenter()// 配置HMS Core SDK的Maven仓地址。maven {url '/repo/'}}}

备注:Maven仓地址无法直接在浏览器中打开访问,只能在IDE中配置。如需添加多个Maven代码库,请将华为公司的Maven仓地址配置在最后

添加编译依赖,打开子工程app下的build.gradle文件

dependencies {// {version} 替换为实际的版本号// 如:api 'com.huawei.hms:push:5.0.4.302' api 'com.huawei.hms:push:{version}'}

在文件头apply plugin: 'com.android.application’下一行添加如下配置

apply plugin: 'com.huawei.agconnect'

在manifest节点下增加所需权限

<!--HMS-SDK引导升级HMS功能,访问OTA服务器需要网络权限--> <uses-permission android:name="android.permission.INTERNET" /> <!--HMS-SDK引导升级HMS功能,保存下载的升级包需要SD卡写权限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--检测网络状态--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!--检测wifi状态--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!--为了获取用户手机的IMEI,用来唯一的标识用户。--> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!--如果是安卓8.0,应用编译配置的targetSdkVersion>=26,请务必添加以下权限 --><uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /><!-- 接收PUSH TOKEN的广播以及PUSH消息需要定义该权限 ${PACKAGE_NAME} 要替换上您应用的包名 --><permission android:name="${PACKAGE_NAME}.permission.PROCESS_PUSH_MSG"android:protectionLevel="signatureOrSystem"/><!--接收PUSH TOKEN的广播以及PUSH消息需要定义该权限 ${PACKAGE_NAME} 要替换上您应用的包名 --><uses-permission android:name="${PACKAGE_NAME}.permission.PROCESS_PUSH_MSG" />

在application节点下声明2个receiver和1个service,用于接收广播信息

用来接收PUSH消息的receiver:<!-- 接入HMSSDK PUSH模块需要注册,第三方相关 :接收Push消息(注册、透传消息、通知栏点击事件)广播,此receiver类需要开发者自己创建并继承com.huawei.hms.support.api.push.PushReceiver类,参考示例代码中的类:com.huawei.hmsagent.HuaweiPushRevicer--><!--“xxx”用实际的类名替换, ${PACKAGE_NAME} 要替换上您应用的包名--><receiver android:name="xxx"android:permission="${PACKAGE_NAME}.permission.PROCESS_PUSH_MSG"><intent-filter><!-- 必须,用于接收token --><action android:name="com.huawei.android.push.intent.REGISTRATION" /><!-- 必须, 用于接收透传消息 --><action android:name="com.huawei.android.push.intent.RECEIVE" /><!-- 必须, 用于接收通知栏消息点击事件 此事件不需要开发者处理,只需注册就可以--><action android:name="com.huawei.intent.action.PUSH_DELAY_NOTIFY"/></intent-filter></receiver>

配置混淆脚本

开发者编译APK时请不要混淆HMS SDK以及HMS SDK的相关资源文件,避免功能异常

加入排除hms的混淆配置

-ignorewarning-keepattributes *Annotation*-keepattributes Exceptions-keepattributes InnerClasses-keepattributes Signature-keepattributes SourceFile,LineNumberTable-keep class com.hianalytics.android.**{*;}-keep class com.huawei.updatesdk.**{*;}-keep class com.huawei.hms.**{*;}-keep class com.huawei.android.hms.agent.**{*;}

5.客户端开发

主要实现:获取设备的PUSH Token,获取Token后,开发者可以在联盟PUSH控制台或者开发者自己服务器向这些Token发送推送消息

5.1申请Push Token

通过Push SDK的自动初始化能力来自动获取Token

HmsMessaging.getInstance(mContext).setAutoInitEnabled(true);

通过HmsMessageService类中的onNewToken方法获取Token值

@Overridepublic void onNewToken(String token) {// 获取tokenLog.i(TAG, "received refresh token:" + token);// 判断token是否为空if (!TextUtils.isEmpty(token)) {refreshedTokenToServer(token);}}// 将获取Token传给APP服务器端private void refreshedTokenToServer(String token) {Log.i(TAG, "sending token to server. token:" + token);}

5.2设置是否显示通知栏消息

通知栏消息是由系统直接在通知中心下拉列表呈现的即时消息。您如果想控制应用是否允许显示通知栏消息,可以调用HmsMessaging类中的turnOnPush或者HmsMessaging类中的turnOffPush方法

/*** 2.设置是否显示通知栏消息** @param enable*/public void setReceiveNotifyMsg(final boolean enable) {if (enable) {HmsMessaging.getInstance(mContext).turnOnPush().addOnCompleteListener(new OnCompleteListener<Void>() {@Overridepublic void onComplete(Task<Void> task) {if (task.isSuccessful()) {CLog.i(TAG, "turnOnPush Complete");} else {CLog.i(TAG, "turnOnPush failed: cause="+ task.getException().getMessage());}}});} else {HmsMessaging.getInstance(mContext).turnOffPush().addOnCompleteListener(new OnCompleteListener<Void>() {@Overridepublic void onComplete(Task<Void> task) {if (task.isSuccessful()) {CLog.i(TAG, "turnOffPush Complete");} else {CLog.i(TAG, "turnOffPush failed: cause ="+ task.getException().getMessage());}}});}}

5.3自定义点击消息的动作

5.4展示应用角标

这个具体参看:点我查看

5.5客户端测试

开发者可以参考PUSH控制台发送测试消息

来测试PUSH消息能否正确送达客户端。如需实现服务端自定义发送Push消息

6.集成注意点,常见问题

6.1华为推送服务中提供的透传消息是可能会丢失的.(当APP被杀死后,透传消息有时是收不到的。所以不推荐使用透传去做一些重要的功能)

6.2从Push SDK4.0版本开始我们提供了自动初始化获取Token的能力

6.3应用不要固定判断Token长度,因为后续长度可变;应用的Token要定期更新(建议应用每次启动的时候都获取Token,如果发现和上次取到的不同,则上报到自己的服务器)

6.4推送是否支持非华为手机?

A:支持,非华为手机必须要安装华为移动服务,请到华为应用市场中搜索下载

6.5通知栏消息系统版本要求

A:支持NC(Notification Center)功能的手机:部分EMUI4.0和4.1的手机,以及EMUI5.0及之后的华为手机。建议最好是5.0系统以及以上

6.6通知栏消息样式

华为通知样式默认是系统默认样式,通知栏消息的声音、样式和振动等不可以自定义大文本样式:默认样式下仅支持单行文本,大文本样式支持标题单行,内容文字多行(当前EMUI 9系统限制最多显示12行中文或者14行英文,EMUI 10&11系统限制最多显示11行中文或者13行英文)自定义消息小图标

6.7推送是否支持角标

A:目前不支持通知栏消息和角标的同步,透传消息可以自行实现

6.8透传消息和通知栏消息的区别

A:

透传消息:是华为Push将消息送达手机后不做呈现,直接转给开发者的应用,由应用本身去解析消息和呈现内容

通知栏消息:是华为Push将消息送达手机后,会在通知栏显示一条消息,点击后触发指定动作,应用不需要去解析消息和控制呈现,减少了应用的开发工作量

6.9无法收到推送消息

A:

EMUI版本太低小于4.1.或华为移动服务版本较低检查CP是否使用的是老版本的的push,老版本sdk会出现消息延时很明显的情况,以及收不到推送,需要尽快切换到新版本服务端在推送消息到设备时,是否Token失效等,可让服务端配合查发送消息的返回状态码,详情 点我查看

6.10接收不到消息,抓取相关日志

Adb连上手机分别执行下面命令

adb shell setprop log.tag.hwpush VERBOSEadb logcat –v time > /Users/aaron/Desktop/huawei/hwpush.log

7.参考

Android集成华为推送踩坑问题总结Android华为推送自定义动作的实现Android集成华为推送踩坑问题总结消息推送(华为)推送开发常见问题华为官网常见问题【重要】Huawei Push 的Token生成规则变化公告更多详细信息,点我查看

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