简介

Nearby Message是在连接Internet的情况下,订阅者发现周边消息发布者,然后从云服务器获取到发布者注册的消息。典型的应用场景如下:

您将建立什么

在本篇codelab中,您将使用已经创建好的Demo Project实现对华为Nearby开放服务的API调用,Nearby Message使用场景有两类,一类是基于应用的消息发布和订阅;另一类是基于Beacon的消息发布和订阅。此Demo是基于Beacon的使用场景。通过Demo Project您可以体验到:

您将会学到什么

硬件要求

软件要求

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

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

登录AppGallery Connect网站,选择"我的应用",点击创建的应用。

点击"开发"–>"概览",点击图标,选择"API管理",进入服务管理菜单,打开"Nearby Service"开关。

API 凭证在联盟上配置

登录华为开发者联盟网站,进入"管理中心"。

在"API和服务"-> "凭证"中,在创建的应用下,打开API密钥的"编辑"操作。

"应用限制"区域中,选择"Android应用",将创建的应用包名及生成的SHA256证书指纹填入后保存:

API 凭据在AGC上绑定

AppGallery Connect网站,进入"我的应用",选择之前创建过的应用。点击进入后,进入"开发"->"构建"->"近距离通信服务"->"API凭据绑定", 绑定API凭据。点击"绑定":

API 凭证在联盟上配置步骤中保存的ClientId填入,绑定API凭据。

添加AGC配置文件

在AppGallery Connect网站上,选择"我的应用",在应用列表中选择创建的应用,点击进入。选择"开发"–> "概览",点击,选择"添加SDK",按照文档指引操作。

添加编译依赖

打开应用级的build.gradle文件:

在build.gradle文件头添加配置:

apply plugin: 'com.huawei.agconnect'

将编译依赖项添加到"dependencies" 中:

dependencies { implementation 'com.huawei.hms:nearby: {version}' }

如图所示:

配置混淆脚本

打开Android Studio工程的混淆配置文件proguard-rules.pro:

加入排除HMS 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.**{*;}

如果开发者使用了AndResGuard,需要在混淆配置文件中加入AndResGuard白名单。

"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*", "R.string.agc*"

同步工程

点击File->Sync Project with Gradle Files同步工程。

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

在上一小节中,您已经成功集成了Nearby Service SDK。本小节您将尝试编写一个Demo,学会在Beacon场景下,如何使用HMS Nearby Service SDK的主要接口。您只需要按照下文的每一步提示,就可以边学边做,一起构建出这个Demo。

修改AndroidManifest.xml

首先,您需要修改应用的权限。在您的工程中找到app目录下的src目录,修改src目录下的AndroidManifest.xml文件,在文件中添加以下6种权限。

代码如下:

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- Android6.0之后,BLE扫描还需要地理位置权限 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

复制代码和资源文件

按照demo的代码目录,在工程的Project视图下,复制以下文件到您新建工程对应的目录下:

Demo代码示例

以我们提供的demo为例,我们的Demo演示了基于Beacon的附近餐厅优惠信息推送。
注册监听,当检测到手机蓝牙、GPS、网络未连接时,给出提示,代码示例如下:
NearbyCanteens\src\app\src\main\java\com\huawei\hms\nearby\beaconcanteen\CanteenActivity.java

private void registerStatusReceiver() { IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED); intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED); intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); intentFilter.addAction(LocationManager.PROVIDERS_CHANGED_ACTION); mContext.registerReceiver(stateChangeReceiver, intentFilter); }

以下代码是靠近餐厅的beacon设备时,接收消息的过程,代码示例如下:

NearbyCanteens\src\app\src\main\java\com\huawei\hms\nearby\beaconcanteen\CanteenActivity.java

mMessageHandler = new MessageHandler() { @Override public void onFound(Message message) { super.onFound(message); doOnFound(message); } }; MessagePicker msgPicker = new MessagePicker.Builder().includeAllTypes().build(); Policy policy = new Policy.Builder().setTtlSeconds(Policy.POLICY_TTL_SECONDS_INFINITE).build(); GetOption getOption = new GetOption.Builder().setPicker(msgPicker).setPolicy(policy).build(); Task<Void> task = messageEngine.get(mMessageHandler, getOption);

以下是接近各餐厅beacon设备后,获得各餐厅推出的优惠信息,并将优惠信息实时推送到程序前台并显示,代码示例如下:

NearbyCanteens\src\app\src\main\java\com\huawei\hms\nearby\beaconcanteen\CanteenActivity.java

private void doOnFound(Message message) { if (message == null) { return; } String type = message.getType(); if (type == null) { return; } String messageContent = new String(message.getContent()); Log.d(TAG, "New Message:" + messageContent + " type:" + type); if (type.equalsIgnoreCase(Constant.CANTEEN)) { operateOnFoundCanteen(messageContent); } else if (type.equalsIgnoreCase(Constant.NOTICE)) { operateOnFoundNotice(messageContent); } }

编译、加载、调试

当您根据自己的需要,修改完代码后,就可以进行编译。
完成编译后,生成apk,安装到华为手机上,并调试、运行。

Beacon操作,需要配置数据存储位置:
AppGallery Connect网站上,进入"我的应用",选择之前创建过的应用。点击进入后,在"开发"–>"概览"页面的"产品"区域,设置数据存储位置:

AppGallery Connect网站上创建消息类型,注册Beacon设备后,并添加消息附件。操作如下:

创建消息类型

登录AppGallery Connect网站,进入"我的应用",选择之前创建过的应用。点击进入后,进入"开发"->"构建"->"近距离通信服务" ->"消息类型",创建消息类型。点击"创建":

根据该demo,消息类型需要先后配置为canteen、notice。

注册Beacon

点击进入"开发"->"构建" ->"近距离通信服务" ->"Beacon设备管理",对Beacon设备进行注册。点击"创建":

必填项Beacon ID及Beacon类型可通过Beacon设备厂商提供的app(例如:Sensoro)或一些在应用市场上下载的第三方app(例如:Beacon Tools)获取到,获取之后,注册Beacon。
例:打开Beacon设备,手机上安装Sensoro、开启蓝牙,扫描附件的Beacon设备。扫描到后,选择界面中的一个设备点击进入,如下:

a.若Beacon类型选择Eddystone-UID,则BeaconID为5dc33487f02e477d4058(Sensoro厂商的)和下图中的SN号拼接而成(字母全转为小写再输入),如下图的Beacon类型为Eddystone-UID,BeaconId为5dc33487f02e477d40580117c59881d9。

如下,创建Beacon设备:

b.若Beacon类型选择iBeacon,则BeaconID是由下图的UUID、MAJOR和MINOR拼接而成(字母全转为小写再输入)。如下图的Beacon类型为iBeacon,BeaconId为23a01af0232a45189c0e323fb773f5ef5696074f。

如下,创建Beacon设备:

按以上方式注册两个Beacon设备,为了方便以下步骤说明,注册的Beacon设备,我们称为Beacon1、Beacon2。

配置消息附件

在"Beacon设备管理"面板上,选择注册Beacon步骤中注册过的Beacon设备,在操作栏选择"消息附件",进入消息附件配置页面:

点击"配置":

选择创建消息类型步骤中创建的消息类型,分别对Beacon1设备和Beacon2设备进行配置消息附件:
1、配置Beacon1 设备:

a. 选择创建消息类型步骤中创建的消息类型canteen,消息内容填入{"canteenDesc":"This is the description of Canteen A.","canteenName":"Canteen A"},提交;

b. 选择创建消息类型步骤中创建的消息类型notice,消息内容填入{"canteenName":"Canteen A","notice":"Huawei employees dinning here can get a 20% discount and a free fruit platter."},提交;

2、配置Beacon2 设备:

a. 选择创建消息类型步骤中创建的消息类型canteen,消息内容填入{"canteenDesc":"This is the description of Canteen B.","canteenName":"Canteen B"},提交;

b. 选择创建消息类型步骤中创建的消息类型notice,消息内容填入{"canteenName":"Canteen B","notice":"12% off for all dishes on New Year's Eve. VIPs can have an extra 10% discount."},提交。

当您完成了以上步骤时,让我们在华为手机上运行这个应用吧!

初始运行界面

结果展示

发现餐厅及餐厅优惠信息:

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

源码下载

已复制代码