
本文共 6659 字,大约阅读时间需要 22 分钟。
SDK说明
推送消息类型
Push Kit可发送两种类型的消息给终端:通知栏消息和透传消息。
受限说明
送达率说明
Push Kit致力于提供安全可靠的消息发送通道,保障消息成功送达。影响消息的送达情况因素有:
- 终端设备是否在线。
- 如果设备离线,Push Kit会缓存消息,待用户上线后,再将消息投递给用户。Push Kit只缓存一次用户的消息,若用户在线后还发不通,Push Kit不再缓存。
- 用户手机上集成Push SDK的应用是否被卸载。
- 网络状况是否稳定。
- 终端手机的安全控制策略。
- 不同厂商终端设备对HMS Core(APK)的支持度。
- 透传消息送达依赖应用进程是否存在。
配置AppGallery Connect
1.生成签名证书指纹
2.打开命令行工具(使用CMD命令),执行cd命令进入keytool.exe所在的目录(图中样例为PC上java程序安装在C盘的Program Files目录)。
File—>Othor Settings—>Defaut Project Structure
另外,在Android studio的话,可以直接在Terminal上输入keytool -list -v -keystore 签名地址
,再输入密钥的密码就OK了。
3.执行命令keytool -list -v -keystore ,按命令行提示进行操作。为应用签名文件的完整路径。例如:
keytool -list -v -keystore C:\TestApp.jks
4.根据结果获取对应的SHA256指纹

5.配置签名证书指纹:
- 登录AppGallery Connect网站,点击“我的项目”。
- 在项目列表中找到您的项目,在项目中点击需要配置签名证书指纹的应用。
- 在“项目设置 > 常规”页面的“应用”区域,点击“SHA256证书指纹”后的图标,输入生成的SHA256指纹
- 下载如图显示的"agconnect-services.json"
集成HMS Core SDK
添加应用的AppGallery Connect配置文件
将刚才下载的"agconnect-services.json"文件拷贝到应用级根目录下。

配置HMS Core SDK的Maven仓地址
1.打开Android Studio项目级“build.gradle”文件。

2.添加HUAWEI agcp插件以及Maven代码库
-
在“buildscript > repositories”中配置HMS Core SDK的Maven仓地址。
-
在“allprojects > repositories”中配置HMS Core SDK的Maven仓地址。
-
如果App中添加了“agconnect-services.json”文件则需要在“buildscript > dependencies”中增加agcp配置。
buildscript { repositories { google() jcenter() maven {url 'https://developer.huawei.com/repo/'} } dependencies { ... classpath 'com.huawei.agconnect:agcp:1.4.1.300' } } allprojects { repositories { google() jcenter() maven {url 'https://developer.huawei.com/repo/'} } }
添加编译依赖
1.打开应用级的“build.gradle”文件。
2.在“dependencies”中添加如下编译依赖。
dependencies { implementation 'com.huawei.hms:push:{version}'}
说明
{version}请替换为实际的SDK版本号,版本号索引请参见版本更新说明,例如:implementation ‘com.huawei.hms:push:5.0.2.300’。
3.在文件头apply plugin: 'com.android.application’下一行添加如下配置。
apply plugin: 'com.huawei.agconnect'
配置签名
注意:这里配置的签名需要与前面步骤中拿去生成“agconnect-services.json”文件的签名数据一致。
将生签名文件拷贝到工程的app目录下,在build.gradle文件中配置签名。android { signingConfigs { config { keyAlias 'xxx' keyPassword 'xxxx' storeFile file('xxx.jks') storePassword 'xxxx' } } buildTypes { debug { signingConfig signingConfigs.config } release { signingConfig signingConfigs.config minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } }
同步工程
在完成以上的配置后,点击工具栏中的gradle同步图标完成“build.gradle”文件的同步,然后将相关依赖下载到本地。
配置Manifest文件
集成最新的HMS Core Push SDK版本后要在“AndroidManifest.xml”文件的application标签下注册自己的Service,此步骤用于接收服务器推送的消息与Token,接收方法见“下文继续会整理到的申请Push Token”。
如下,HmsPushService类继承于HmsMessageService类并实现其中的方法。 在Manifest文件声明:详细代码:
import android.content.Intent;import android.text.TextUtils;import android.util.Log;import com.huawei.hms.push.HmsMessageService;import com.huawei.hms.push.RemoteMessage;import com.huawei.hms.push.SendException;import java.util.Arrays;public class HmsPushService extends HmsMessageService { private final static String CODELABS_ACTION = "com.huawei.codelabpush.action"; @Override public void onNewToken(String token) { Log.i("received refresh token:" + token); //... } private void refreshedTokenToServer(String token) { Log.i("sending token to server. token:" + token); //... } /** * 接收透传消息 * @param message RemoteMessage */ @Override public void onMessageReceived(RemoteMessage message) { Log.i("onMessageReceived is called"); if (message == null) { LogTool.f("Received message entity is null!"); return; } //... } private void startJob(RemoteMessage message){ Log.i( "Processing now."); //... } @Override public void onTokenError(Exception e) { super.onTokenError(e); }}
配置混淆脚本
打开工程的混淆配置文件“proguard-rules.pro”,加入排除HMS Core SDK的混淆配置。
-ignorewarnings-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.**{*;}
申请Push Token
场景介绍
每个设备上的每个应用的Token都是唯一存在的,客户端调用HmsInstanceId类中的getToken方法向服务端请求应用的唯一标识:Push Token,开发者的服务器根据这个Token推送消息。开发者可以将Token上报到自己的应用服务器维护并加入Token列表,然后调用Push服务器的推送消息API,根据Token批量推送消息,服务器发送消息请参见服务端开发指导。当getToken方法返回为空时,开发者通过HmsMessageService类中的onNewToken方法获取Token值。
开发者也可以通过Push SDK的自动初始化能力来自动获取token。
Token会在包括但不限于下述场景中发生变化:
- App卸载重装。
- App调用注销Token方法。
- 用户恢复出厂设置。
- 清除应用数据。
应用的Push Token要定期更新(建议应用每次启动的时候都获取Token,如果发现和上次取到的不同,则上报到自己的服务器)。
请勿使用Token跟踪标记用户。注意事项
- getToken方法只有在AppGallery Connect平台打开相关服务后申请Token才会返回成功。
- EMUI 10.0及以上版本的华为设备上,getToken方法直接返回Token。如果当次调用失败Push会缓存申请,之后会自动重试申请,成功后则以onNewToken方法返回。
- 低于EMUI 10.0的华为设备上,getToken方法返回为空,确保Push服务开通的情况下,Token值后续以onNewToken方法返回。
- 集成HMS Core SDK最新版本需要HMS Core(APK)的版本不低于3.0.0。如果低于3.0.0版本,当应用有前台界面时HMS Core SDK会提示升级HMS Core(APK)为最新版本,此时HmsInstanceId类中的getInstance的入参必须传入Activity类实例;当应用是后台应用时,如果开发者不想弹出引导升级的页面时,可以传入非Activity类型的Context类实例。
- 设置了自动初始化能力的应用,不需要显式的调用getToken申请Token,Push SDK会自动通过onNewToken回调方法返回Token。
开发步骤
建议在App启动后首个activity的onCreate方法调用getToken方法。(在实际项目中,我们是直接在Applicatin中调用的)1.调用getToken方法获取Token。
private void getToken() {new Thread() { @Override public void run() { try { // read from agconnect-services.json String appId = AGConnectServicesConfig.fromContext(MainActivity.this).getString("client/app_id"); String token = HmsInstanceId.getInstance(MainActivity.this).getToken(appId, "HCM"); Log.i(TAG, "get token:" + token); if(!TextUtils.isEmpty(token)) { sendRegTokenToServer(token); } } catch (ApiException e) { Log.e(TAG, "get token failed, " + e); } }}.start();}private void sendRegTokenToServer(String token) { Log.i(TAG, "sending token to server. token:" + token);}
2.覆写onNewToken方法,Token发生变化时或者EMUI版本低于10.0以onNewToken方法返回。
// This method callback must be completed in 10 seconds. Otherwise, you need to start a new Job for callback processing.@Overridepublic void onNewToken(String token) { Log.i(TAG, "received refresh token:" + token); // send the token to your app server. if (!TextUtils.isEmpty(token)) { refreshedTokenToServer(token); }}private void refreshedTokenToServer(String token) { Log.i(TAG, "sending token to server. token:" + token);}
说明
- 调用getToken方法后获得的token一定要做判空处理。
- 在调用getToken方法外一定要增加异常捕获处理。
踩坑
坑1:跳转到自定义的activity:
支持action参数需要EMUI 10.0.0及以上,推送服务App版本为10.1.0及以上。
2.关于要设置通知消息前台展示的话:功能仅能:EMUI 9.1.0以上,HMS Core SDK 4.0以上支持

3.关于设置横幅通知:

Ref:
发表评论
最新留言
关于作者
