アプリの運用で日常的に使用されるユーザーを宣伝および呼び戻す手段として、メッセージ プッシュは、ユーザーとの継続的な対話とつながりを確立するための優れた方法です。Push Kitとは、Huaweiが提供するクラウドから端末へのメッセージプッシュチャネルを確立するメッセージプッシュプラットフォームであり、本記事ではHarmonyOS(Java)版の機能とアクセスガイダンスを紹介します。
HarmonyOS (Java) バージョンの主な機能は、通知バーをプッシュし、トークンに従って透過的にメッセージを送信することです。HarmonyOS Java SDK は、HarmonyOS アプリケーション開発用のプッシュ メッセージに関連するインターフェイスを提供し、携帯電話やタブレットに適しています。
プッシュトークンに基づいたプッシュメッセージ
メッセージをプッシュする対象ユーザーのプッシュ トークンを入力できます。一度に最大 1000 個のプッシュ トークンを入力できます。
透明性のあるメッセージ
パススルー メッセージは、クライアント アプリケーションが処理を担当するメッセージです。Push クラウドによって送信されたデータまたは指示を受信した後、端末デバイスはデータを直接表示するのではなく、そのデータをアプリケーションに渡します。アプリケーションはコンテンツを分析し、関連するアクション (Web ページ、アプリ内ページ、等。)。メッセージ スタイルをカスタマイズして、メッセージをより効率的かつ柔軟にプッシュできます。
透過的に送信されるメッセージの到着率は、Android システムとアプリケーションがバックグラウンドに存在するかどうかに影響され、プッシュ サービスは透過的に送信されるメッセージの高い到着率を保証しません。
メッセージを透過的に送信するための一般的なシナリオ: VoIP 通話、音声ブロードキャスト、友人との対話通知など。
開発準備
具体的な開発準備については、公式。
アプリケーション開発
プッシュトークンの取得
トークンはプッシュ トークンです。各デバイス上の各アプリケーションのトークンは一意です。クライアントはgetTokenメソッドを呼び出して、プッシュ サーバーからアプリケーション トークンを要求します。プッシュ サーバーから返されたトークンに基づいて、アプリケーションにメッセージをプッシュできます。getTokenメソッドが空を返した場合、onNewTokenメソッドを通じてToken 値を取得できます。
プッシュ トークンを独自のアプリケーション サーバーに報告し、トークン リストを定期的に更新することをお勧めします。ダウンストリーム メッセージ APIを呼び出して、これらのトークンに基づいてメッセージをバッチでプッシュできます。
- 新しいスレッドを作成し、getToken メソッドを呼び出してプッシュ トークンを取得します (アプリケーションの起動後の最初のアビリティで getToken メソッドを呼び出すことをお勧めします)。
public class TokenAbilitySlice extends AbilitySlice {
private static final HiLogLabel LABEL_LOG = new HiLogLabel(HiLog.LOG_APP, 0xD001234,
"TokenAbilitySlice");
private void getToken() {
// 创建新线程
new Thread("getToken") {
@Override
public void run() {
try {
// 从agconnect-services.json文件中读取client/app_id
String appId = "your APP_ID";
// 输入token标识"HCM"
String tokenScope = "HCM";
// 获取Push Token
String token = HmsInstanceId.getInstance(getAbility().getAbilityPackage(), TokenAbilitySlice.this).getToken(appId, tokenScope);
} catch (ApiException e) {
// 获取Push Token失败时,打印错误码
HiLog.error(LABEL_LOG, "get token failed, the error code is %{public}d", e.getStatusCode());
}
}
}.start();
}
}
- サービス ( HmsMessageService を継承している) で、onNewToken メソッドをオーバーライドし、トークンが変更されたときにonNewTokenメソッドでそれを返します。
public class DemoHmsMessageServiceAbility extends HmsMessageService {
private static final HiLogLabel LABEL_LOG = new HiLogLabel(HiLog.LOG_APP, 0xD001234, "DemoHmsMessageServiceAbility");
@Override
// 获取Token
public void onNewToken(String token) {
HiLog.info(LABEL_LOG, "onNewToken called, token:%{public}s", token);
}
@Override
// 获取Token失败,打印错误码
public void onTokenError(Exception exception) {
HiLog.error(LABEL_LOG, "get onNewtoken error, error code is %{public}d", ((ZBaseException)exception).getErrorCode());
}
}
透過的なメッセージデータを取得する
サービス ( HmsMessageService を継承している) で、onMessageReceivedメソッドをオーバーライドします。透過的メッセージを端末デバイスに送信する限り、透過的メッセージのコンテンツを取得できます。
public class DemoHmsMessageServiceAbility extends HmsMessageService {
private static final HiLogLabel LABEL_LOG = new HiLogLabel(HiLog.LOG_APP, 0xD001234,
"DemoHmsMessageServiceAbility");
@Override
public void onMessageReceived(ZRemoteMessage message) {
// 打印消息的内容字段
HiLog.info(LABEL_LOG, "get token, %{public}s", message.getToken());
HiLog.info(LABEL_LOG, "get data, %{public}s", message.getData());
ZRemoteMessage.Notification notification = message.getNotification();
if (notification != null) {
HiLog.info(LABEL_LOG, "get title, %{public}s", notification.getTitle());
HiLog.info(LABEL_LOG, "get body, %{public}s", notification.getBody());
}
}
}
メッセージを送ります
• AppGallery Connect Web サイトにログインしてメッセージを送信できます 詳細については、「HarmonyOS アプリ プッシュ メッセージ」を参照してください。
• サーバー側 API を使用して、メッセージをアプリケーションにプッシュできます。
- サーバーは、HUAWEI ID サーバーのインターフェイス ( https://oauth-login.cloud.huawei.com/oauth2/v3/token) を呼び出して、証明書トークンを要求します。リクエストの例は次のとおりです。
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=<客户端ID>&client_secret=<客户端密钥>
応答の例は次のとおりです。
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
{
"access_token": "<返回的Access Token>",
"expires_in": 3600,
"token_type": "Bearer"
}
- サーバーは API を呼び出してメッセージをプッシュします。リクエストの例は次のとおりです。
HTTPS投稿URL:
POST https://push-api.cloud.huawei.com/v1/clientid/messages:send
リクエストヘッダーの例:
Content-Type: application/json; charset=UTF-8
Authorization: Bearer CF3Xl2XV6jMK************************DgAPuzvNm3WccUIaDg==
リクエストメッセージ本文の例 (通知バーのメッセージ):
{
"validate_only": false,
"message": {
"android": {
"notification": {
"title": "test title",
"body": "test body",
"click_action": {
"type": 3
}
}
},
"token": ["pushtoken1"]
}
}
カスタムクリックメッセージアクション
通知バーのメッセージをクリックするアクションをカスタマイズできます。たとえば、アプリケーションのホームページを開く、Web ページの URL を開く、アプリケーションのカスタム ページを開くなどです。
アプリのホームページを開く
• AppGallery Connectを介してプッシュ通知を送信したり、アプリを開くクリック通知アクションを設定したり、アプリ ページをホームページに設定したりできます。
• サーバー API を通じてメッセージをプッシュできます。
click_actionフィールドはメッセージ本文に含まれ、 typeの値は 3 で、メッセージをクリックした後にアプリケーションのホームページが開かれることを示します。
{
"validate_only": false,
"message": {
"android": {
"notification": {
"title": "test title",
"body": "test body",
"click_action": {
"type": 3
}
}
},
"token": ["pushtoken1"]
}
}
Webページを開く
• AppGallery Connectを通じてプッシュ通知を送信したり、Web ページを開くクリック通知アクションを設定したりできます。
• サーバー API を通じてメッセージをプッシュできます。
click_actionフィールドはメッセージ本文に含まれ、typeの値は 2 で、メッセージをクリックした後に Web ページが開かれることを示します。
{
"validate_only": false,
"message": {
"android": {
"notification": {
"title": "test title",
"body": "test body",
"click_action": {
"type": 2,
"url":"https://www.huawei.com"
}
}
},
"token": ["pushtoken1"]
}
}
アプリのカスタマイズページを開く
- クライアント アプリケーションは、まずカスタム ページ (例として「MyActionAbility」) を作成し、プロジェクトの「entry/src/main」ディレクトリの下にある「config.json」ファイルにアビリティのスキル フィールドを追加します。エンティティの値は「entity.system.default」で変更できませんが、アクションの値はカスタマイズできます (「com.test.myaction」を例にします)。
{
"orientation": "unspecified",
"name": "com.test.java.MyActionAbility",
"icon": "$media:icon",
"description": "$string:myactionability_description",
"label": "$string:entry_MyActionAbility",
"type": "page",
"launchType": "standard",
"skills": [
{
"entities": ["entity.system.default"],
"actions": ["com.test.myaction"]
}
]
}
- AppGallery Connectを介してメッセージをプッシュし、アプリを開くためのクリック通知アクションを設定し、アプリ ページをカスタム アクション ページに設定できます (アクションには、前の手順で定義したアクションの値を入力してください)。
サーバー側 API を通じてメッセージをプッシュすることもできます。メッセージ本文には、click_action フィールドとactionフィールドが含まれます。typeの値は 1 で、メッセージをクリックした後にアプリケーションのカスタム ページが開かれることを意味します。actionの値は、前の手順で定義したアクションの値です。
{
"validate_only": false,
"message": {
"android": {
"notification": {
"title": "test title",
"body": "test body",
"click_action": {
"type": 1,
"action":"com.test.myaction"
}
}
},
"token": ["pushtoken1"]
}
}
データを渡す
メッセージをプッシュすると、データフィールドを保持でき、ユーザーがメッセージをクリックすると、データ内のデータが次のメソッドを通じてクライアントアプリケーションに渡されます。
- メッセージをプッシュするときにデータフィールドを運びます。
• AppGallery Connect を通じてメッセージをプッシュし、カスタムのキーと値のペアを設定します。
• サーバー API を通じてメッセージをプッシュすると、データ フィールドがメッセージ本文に組み込まれます。
{
"validate_only": false,
"message": {
"android": {
"notification": {
"title": "test title",
"body": "test body",
"click_action": {
"type": 1,
"action":"com.test.myaction"
}
},
"data": "{'key_data':'value_data'}"
},
"token": ["pushtoken1"]
}
}
- クライアントアプリケーション開発では、メッセージをクリックするとデータフィールド関数を取得するページにジャンプしますが、ここでは例としてメッセージをクリックするとアプリケーションホームページ(MainAbilitySlice)にジャンプしてデータフィールドを取得します。
public class MainAbilitySlice extends AbilitySlice {
private static final HiLogLabel LABEL_LOG = new HiLogLabel(HiLog.LOG_APP, 0xD001234, "myDemo");
@Override
public void onStart(Intent intent) {
HiLog.info(LABEL_LOG, "MainAbilitySlice get started...");
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
// 调用解析方法
parseIntent(intent);
}
private void parseIntent(Intent intent){
if (intent == null){return;}
IntentParams intentParams = intent.getParams();
if (intentParams == null) {return;}
// 获取data字段中的键值对
String key = "key_data";
Object obj = intentParams.getParam(key);
try{
// 打印data字段中的键值对
HiLog.info(LABEL_LOG, "my key: %{public}s, my value: %{public}s", key, obj);
}catch (Exception e){
HiLog.info(LABEL_LOG, "catch exception : " + e.getMessage());
}
}
}
さらに詳しく>>
Huawei Push Service Allianceの公式Webサイトにアクセスしてください
Huawei Push Service開発ガイダンスドキュメントを入手する
HMS コア アライアンスの公式 Web サイトにアクセスしてください
HMS コア開発ガイダンス ドキュメントを入手する
私たちをフォローして、HMS Coreの最新技術情報を初めて学びましょう~