发送者ID可在AppGallery Connect顶部导航栏选择“开发与服务”,左侧导航栏选择“项目设置”,该页面的项目ID即是发送者ID。
从Push SDK 5.0.4版本开始,推送服务提供了多发送者功能,该功能支持多个发送者向某个应用推送消息。举例来说,华为钱包在手机上是一个应用,华为商城和华为视频想给安装了华为钱包的用户推送华为商城促销和华为视频会员充值有优惠的营销消息,华为钱包是目标应用,华为商城和华为视频都是发送者,该场景就需要使用多发送者能力。
目标应用开发者登录AppGallery Connect网站,点击“开发与服务”,在项目列表中找到您的项目,通过导航到“配置”页签,添加其他发送者ID(即发送者应用归属的项目ID),为其他发送者配置向您的应用发送消息的权限。

发送者ID可在AppGallery Connect顶部导航栏选择“开发与服务”,左侧导航栏选择“项目设置”,该页面的项目ID即是发送者ID。

请确认agconnect-services.json文件中含有project_id字段,如果没有,您需重新下载该文件,否则调用getToken(subjectId)会报错。
public class MainActivity extends AppCompatActivity {
private void getSubjectToken() {
// 创建一个新线程
new Thread() {
@Override
public void run() {
try {
// 发送者的项目ID
String projectId = "the id of sender";
// 目标应用为发送者申请token
String token = HmsInstanceId.getInstance(MainActivity.this).getToken(projectId);
Log.i(TAG, "get token success");
// 判断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.");
}
}class MainActivity : AppCompatActivity {
private fun getSubjectToken() {
// 创建一个新线程
object : Thread() {
override fun run() {
try {
// 发送者的项目ID
val projectId = "the id of sender"
// 目标应用为发送者申请token
val token = HmsInstanceId.getInstance(this@MainActivity).getToken(projectId)
Log.i(TAG, "get token success")
// 判断token是否为空
if(!TextUtils.isEmpty(token)) {
sendRegTokenToServer(token)
}
} catch (e: ApiException) {
Log.e(TAG, "get token failed, $e")
}
}
}.start()
}
private fun sendRegTokenToServer(token: String?) {
Log.i(TAG, "sending token to server.")
}
}EMUI 10.0版本以下的华为终端设备需要从onNewToken中接收目标应用为发送者申请的Push Token。
@Override
public void onNewToken(String token, Bundle bundle) {
// 获取push token
Log.i(TAG, "received refresh token");
// 判断push token是否为空
if (!TextUtils.isEmpty(token)) {
refreshedTokenToServer(token);
}
}
private void refreshedTokenToServer(String token) {
Log.i(TAG, "sending token to server.");
}override fun onNewToken(token: String?, bundle: Bundle?) {
// 获取push token
Log.i(TAG, "received refresh token")
// 判断push token是否为空
if (!token.isNullOrEmpty()) {
refreshedTokenToServer(token)
}
}
private fun refreshedTokenToServer(token: String) {
Log.i(TAG, "sending token to server.")
}HTTPS POST URL:
POST https://push-api.cloud.huawei.com/v1/[clientid]/messages:send
“[clientid]”请替换为目标应用的Client ID(在项目设置页面获取)。
请求消息头示例:
Content-Type: application/json; charset=UTF-8 Authorization: Bearer CF3Xl2XV6jM***************vNm3WccUIaDg==
通知栏消息体示例:
{
"validate_only": false,
"message": {
"android": {
"notification": {
"title": "test title",
"body": "test body",
"click_action": {
"type": 3
}
}
},
"token": ["pushtoken1"]
}
} {
"validate_only": false,
"message": {
"data": "{'param1':'value1','param2':'value2'}",
"token": ["pushtoken1"]
}
} “token”为目标应用为发送者申请的Push Token。