咸鱼

咸鱼是以盐腌渍后,晒干的鱼

0%

Android集成HMS推送

一、 创建项目


二、 添加应用


添加完应用会自动跳转到 “接入指南”

三、 集成到Android项目

集成HMS Core SDK

1
2
3
dependencies {
implementation 'com.huawei.hms:push:{version}' # 当前版本5.0.4.302
}

四、 SHA256指纹和OAuth推送所需要的参数

1
$ keytool -list -v -keystore C:\TestApp.jks

五、服务端推送

【构建发送消息请求指南】

1. 您的服务器获取Access Token,详情请参见客户端模式

1
2
3
4
5
6
7
POST /oauth2/v3/token HTTP/1.1
Host: oauth-login.cloud.huawei.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&
client_id=< APP ID >&
client_secret=< APP SECRET >

响应

1
2
3
4
5
{
"access_token": "<返回的Access Token>",
"expires_in": 3600,
"token_type": "Bearer"
}

2. 您的服务器调用API发送Push消息,详情请参见下行消息

HTTPS POST URL:

1
POST https://push-api.cloud.huawei.com/v1/[appId]/messages:send

请求消息头示例:

1
Content-Type: application/json; charset=UTF-8Authorization: Bearer CF3Xl2XV6jMKZgqYSZFws9IPlgDvxqOfFSmrlmtkTRupbU2VklvhX9kC9JCnKVSDX2VrDgAPuzvNm3WccUIaDg== 

说明

请求消息头中的Authorization参数生成请参见OAuth 2.0客户端模式,其中的客户端ID和客户端密钥请输入您在AppGallery Connect项目下的Android应用里的App ID和App Secret。

请求消息体示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"validate_only": false,
"message": {
"notification": {
"title": "title",
"body": "body"
},
"android": {
"notification": {
"title": "android title",
"body": "android body",
"click_action": {
"type": 1,
"intent": "#Intent;compo=com.rvr/.Activity;S.W=U;end"
}
}
},
"token": [
"pushtoken1",
"pushtoken2"
]
}
}

说明
通知栏消息中,如果设置了message.android.notification.title和message.android.notification.body,则会分别覆盖message.notification.title和message.notification.body。

透传消息示例报文:

1
2
3
4
5
6
7
8
9
10
{
"validate_only": false,
"message": {
"data": "{'param1':'value1','param2':'value2'}",
"token": [
"pushtoken1",
"pushtoken2"
]
}
}

六、Android端接收透传消息

集成SDK后要在 AndroidManifest.xml 文件的application标签下注册您自己的service,继承HmsMessageService类并实现其中的方法,此处以DemoHmsMessageService类为例(类名由您自定义)。

该service用于接收透传消息获取Token

1
2
3
4
5
6
7
<service
android:name=".DemoHmsMessageService"
android:exported="false">
<intent-filter>
<action android:name="com.huawei.push.action.MESSAGING_EVENT"/>
</intent-filter>
</service>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import com.huawei.hms.push.HmsMessageService;
import com.huawei.hms.push.RemoteMessage;

public class DemoHmsMessageService extends HmsMessageService {

private String TAG = getClass().getName();

@Override
public void onNewToken(String newDeviceToken) {
super.onNewToken(newDeviceToken);

// Token会在包括但不限于下述场景中发生变化:
// 1、App卸载重装;
// 2、App调用注销Token接口;
// 3、用户恢复出厂设置;
// 4、清除应用数据;
// 应用的Push Token要定期更新(建议应用每次启动的时候都获取Token,
// 如果发现和上次不同取到的不同,则上报到自己的服务器)
// 有了这个 DeviceToken 就可以单个推送透传消息到这个手机。
}
/**
* 透传消息
* @param remoteMessage
*/
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
}
@Override
public void onDeletedMessages() {
super.onDeletedMessages();
}
}

App启动时注册推送,自动获取的 newToken

1
HmsMessaging.getInstance(context).setAutoInitEnabled(true);

七、代码混淆

1
2
3
4
5
6
7
8
9
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.huawei.hianalytics.**{*;}
-keep class com.huawei.updatesdk.**{*;}
-keep class com.huawei.hms.**{*;}