简介

华为推送服务(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集成准备》中详细说明来完成。

打开服务开关

请参见打开服务开关

设置数据存储位置

开发者使用Push Kit需要设置数据存储位置,如果不设置,基于主题、WebPush和iOS的发送功能将不可用。如果设置的数据存储位置与开发者的服务器位置不一致,或者设置的数据存储位置与应用所服务的用户所在地不一致,都会导致推送消息下发时延增加。为了减少下发消息在全球各大区之间跳转导致的时延,建议开发者按照您的应用所服务的用户所在地来设置对应的数据存储位置。例如:如果您是拉美的开发者,您所服务的用户大部分在拉美,建议将您的数据存储地设置在新加坡;如果您是中国大陆的开发者,但是您所服务的用户大部分在欧洲,建议将您的数据存储地设置在德国。

配置推送服务参数

请参见配置推送服务参数

添加当前应用的AppGallery Connect配置文件

  1. 登录AppGallery Connect网站,点击"我的项目"。
  2. 在项目列表中找到您的项目,在项目中点击需要集成HMS Core SDK的应用。
  3. 在"项目设置 > 常规"页面的"应用"区域,点击"agconnect-services.json"下载配置文件。
  4. 将"agconnect-services.json"文件拷贝到Android Studio开发工程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:5.0.0.300' }

同步工程

在完成以上的配置后,点击Sync Now,完成"build.gradle"文件的同步,将相关依赖下载到本地。

如上图出现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>
  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*"

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

新建工程

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

创建控件

在MainActivity部署文本框用于展示Push Token。

在MainActivity中编写文本框的更新文本方法。

public class MainActivity extends AppCompatActivity { private TextView tvToken; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvToken = findViewById(R.id.tv_log); MyReceiver receiver = new MyReceiver(); IntentFilter filter=new IntentFilter(); filter.addAction("com.huawei.codelabpush.ON_NEW_TOKEN"); MainActivity.this.registerReceiver(receiver,filter); } public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if ("com.huawei.codelabpush.ON_NEW_TOKEN".equals(intent.getAction())) { String token = intent.getStringExtra("token"); tvToken.setText(token); } } } }

业务代码补全

申请Token

AndroidManifest.xml的application标签下添加<meta-data>元数据。

<application <meta-data android:name="push_kit_auto_init_enabled" android:value="true" /> </application>

接收token

通过MyPushService中重载的onNewToken方法获得的token。

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); sendTokenToDisplay(token); } private void sendTokenToDisplay(String token) { Intent intent = new Intent("com.huawei.push.codelab.ON_NEW_TOKEN"); intent.putExtra("token", token); sendBroadcast(intent); } }

MyPushService继承自HmsMessageService,重写类中的方法onNewToken方法,通过该方法接收Token。

其它功能

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

编译、加载、调试

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

方式一:

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

方式二:

  1. 使用Android studio打包APK文件。
  2. 使用adb工具将构建出的APK安装到华为手机上进行调试。
    adb install D:\WorkSpace\CodeLab\push_demo1\app\release\app-release.apk
  3. 运行Demo后,保证手机联网,即可自动获取token,日志里会打印token,过滤PushDemoLog字符串可以看到Demo的所有日志。

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

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

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

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

相关文档

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

源码下载

已复制代码