简介

华为推送服务(HUAWEI Push Kit)是华为为开发者提供的消息推送平台,建立了从云端到终端的消息推送通道。开发者通过集成HUAWEI Push Kit可以实时推送消息到用户终端应用,构筑良好的用户关系,提升用户的感知度和活跃度。

  1. 开发者通过在APP服务器端调用HUAWEI Push接口,向HUAWEI Push平台发送推送消息;
  2. HUAWEI Push平台将消息发给安装了相应APP的终端设备。

为此,开发者需要:

您将建立什么

在这个Codelab中,你将使用已经创建好的Demo Project实现对华为Push开放服务的API调用,通过Demo Project你可以体验到:

您将会学到什么

硬件要求

软件要求

集成HUAWEI HMS Core能力,需要完成以下准备工作:

具体操作,请按照《HUAWEI HMS Core集成准备》中详细说明来完成。

选择需要开通服务的应用所属产品的名称,进入应用信息页面。

打开服务开关

点击"开发" "概览""API管理",进入服务管理菜单。

打开"Push Kit"服务开关。

设置数据存储位置

开发者使用Push Kit需要设置数据存储位置,如果不设置,基于主题、WebPush和iOS的发送功能将不可用。

配置推送服务参数

点击"开发"页签,左侧导航选择"增长服务"的"推送服务"子项目。

点击"开通"按钮,服务状态即已开通。

至此,已经为创建的应用开通了HUAWEI Push服务。

添加当前应用的AGC配置文件

下载"agconnect-services.json"文件。

将下载的"agconnect-services.json"文件移至AndroidStudio开发工程app的根目录下。

添加编译依赖

打开应用级的build.gradle文件

在"dependencies"中添加编译依赖,需要添加下面所有必要的依赖

dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' // Add the following line implementation 'com.huawei.hms:push:4.0.2.300' }

配置混淆脚本

  1. 打开AndroidStudio工程的混淆配置文件proguard-rules.pro。
  2. 加入混淆配置。
    -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.**{*;}
  3. 如果开发者使用了AndResGuard,需要在混淆配置文件中加入AndResGuard白名单。
    "R.string.agc*", "R.string.hms*", "R.string.connect_server_fail_prompt_toast", "R.string.getting_message_fail_prompt_toast", "R.string.no_available_network_prompt_toast", "R.string.third_app_*", "R.string.upsdk_*", "R.layout.hms*", "R.layout.upsdk_*", "R.drawable.upsdk*", "R.color.upsdk*", "R.dimen.upsdk*", "R.style.upsdk*"

点击sync now 同步工程

如上图出现synced successfully即代表同步成功。

在application节点下进行如下service注册声明,用于接收Token与华为推送的消息。MyPushService类由开发者定义继承自HmsMessageService类。

<service android:name=".MyPushService" android:exported="false"> <intent-filter> <action android:name="com.huawei.push.action.MESSAGING_EVENT" /> </intent-filter> </service>

整个工程代码以及资源结构如下图:

新建工程

在Android Studio里新建工程,可参考创建Android Studio工程

创建控件和编写监听事件

在MainActivity部署按钮和文本框用于可视化操作调用HUAWEI Push提供的API。

在MainActivity中编写按钮的监听事件和文本框的更新文本方法。

btnToken = findViewById(R.id.btn_get_token); btnToken.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getToken(); } });
private void showLog(final String log) { runOnUiThread(new Runnable() { @Override public void run() { View tvView = findViewById(R.id.tv_log); if (tvView instanceof TextView) { ((TextView) tvView).setText(log); Toast.makeText(MainActivity.this, pushtoken, Toast.LENGTH_SHORT).show(); } } }); }

业务代码补全

申请Token

MainActivity.java

/** * 获取token */ private void getToken() { Log.i(TAG, "get token: begin"); // get token new Thread() { @Override public void run() { try { String appId = AGConnectServicesConfig.fromContext(MainActivity.this).getString("client/app_id"); pushtoken = HmsInstanceId.getInstance(MainActivity.this).getToken(appId, "HCM"); if(!TextUtils.isEmpty(pushtoken)) { Log.i(TAG, "get token:" + pushtoken); showLog(pushtoken); } } catch (Exception e) { Log.i(TAG,"getToken failed, " + e); } } }.start(); }

接收token

接收token有两种场景

  1. EMUI10.0以上的华为设备在上述申请token步骤中HmsInstanceId.getInstance.getToken方法返回token;
  2. EMUI10.0以下的设备在如下方法中调用上述申请token方法后,通过MyPushService中重载的onNewToken方法获得的token。
  3. MyPushService.java

    public class MyPushService extends HmsMessageService { private static final String TAG = "PushDemoLog"; @Override public void onNewToken(String token) { super.onNewToken(token); Log.i(TAG, "receive token:" + token); } }

    MyPushService继承自HmsMessageService,重写类中的方法onNewToken方法,该方法有以下几个作用:
    1)在低于EMUI10.0的华为设备上申请token时,通过这个方法返回;
    2)接收服务端刷新的Token;
    3)上次申请token失败,重试申请成功后也通过该方法返回token。

其它功能

主题订阅等其他功能业务介绍、代码调用示例等请参考开发指南

编译、加载、调试

完成上述代码后,手机连上电脑。

方式一:
点击 就可以进行编译构建将包安装到手机上。

方式二:

  1. 使用Android studio打包apk文件。
  2. 使用adb工具将构建出的apk安装到华为手机上进行调试。
    adb install D:\WorkSpace\CodeLab\push_demo1\app\release\app-release.apk
  3. 运行demo后,保证手机联网,点击getToken按钮,获取token,日志里会打印token,过滤PushDemoLog字符串可以看到demo的所有日志。
    1)EMUI10.0及之后的华为设备上,getToken方法直接返回token。token:ADHpIj5s3j6jxaYJUW7miEx6vY5TtUgb8_v1IXIbvf5g4e0Nb4ztnJ7*******

    2)低于EMUI10.0的设备上和缓存重试的申请token,通过onNewToken方法返回。AFcSAHhhnxdrMCYBxth2QOG9IgY2VydAM61DTThqNux3KBC_hgzQQT*******

开发者可以在AppGallery Connect网站的控制台页面在线编辑消息,并向已经从服务器获取到Token的设备推送消息,具体可参考Push控制台发送消息。发送通知消息前请找到对应的应用名称,本应用的包名为:com.huawei.codelabpush。

发送成功后,手机上会接收到通知栏消息:

干得好,你已经成功完成了Codelab并学到了:

您可以阅读下面链接,了解更多相关的信息。

相关文档

您可以在Github上下载源码:github.com/Huawei/Consumer/tree/master/Codelabs/PushKit

也可以点击下方按钮下载源码。

源码下载

已复制代码