プッシュサービスアクセスガイド(HarmonyOS)

アプリの運用で日常的に使用されるユーザーを宣伝および呼び戻す手段として、メッセージ プッシュは、ユーザーとの継続的な対話とつながりを確立するための優れた方法です。Push Kitとは、Huaweiが提供するクラウドから端末へのメッセージプッシュチャネルを確立するメッセージプッシュプラットフォームであり、本記事ではHarmonyOS(Java)版の機能とアクセスガイダンスを紹介します。

HarmonyOS (Java) バージョンの主な機能は、通知バーをプッシュし、トークンに従って透過的にメッセージを送信することです。HarmonyOS Java SDK は、HarmonyOS アプリケーション開発用のプッシュ メッセージに関連するインターフェイスを提供し、携帯電話やタブレットに適しています。

プッシュトークンに基づいたプッシュメッセージ

メッセージをプッシュする対象ユーザーのプッシュ トークンを入力できます。一度に最大 1000 個のプッシュ トークンを入力できます。

透明性のあるメッセージ

パススルー メッセージは、クライアント アプリケーションが処理を担当するメッセージです。Push クラウドによって送信されたデータまたは指示を受信した後、端末デバイスはデータを直接表示するのではなく、そのデータをアプリケーションに渡します。アプリケーションはコンテンツを分析し、関連するアクション (Web ページ、アプリ内ページ、等。)。メッセージ スタイルをカスタマイズして、メッセージをより効率的かつ柔軟にプッシュできます。

透過的に送信されるメッセージの到着率は、Android システムとアプリケーションがバックグラウンドに存在するかどうかに影響され、プッシュ サービスは透過的に送信されるメッセージの高い到着率を保証しません。

メッセージを透過的に送信するための一般的なシナリオ: VoIP 通話、音声ブロードキャスト、友人との対話通知など。

開発準備

具体的な開発準備については、公式

アプリケーション開発

プッシュトークンの取得

トークンはプッシュ トークンです。各デバイス上の各アプリケーションのトークンは一意です。クライアントはgetTokenメソッドを呼び出して、プッシュ サーバーからアプリケーション トークンを要求します。プッシュ サーバーから返されたトークンに基づいて、アプリケーションにメッセージをプッシュできます。getTokenメソッドが空を返した場合onNewTokenメソッドを通じてToken 値を取得できます。

プッシュ トークンを独自のアプリケーション サーバーに報告し、トークン リストを定期的に更新することをお勧めします。ダウンストリーム メッセージ APIを呼び出して、これらのトークンに基づいてメッセージをバッチでプッシュできます。

  1. 新しいスレッドを作成し、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();
    }
}
  1. サービス ( 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 を使用して、メッセージをアプリケーションにプッシュできます。

  1. サーバーは、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"
}
  1. サーバーは 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"]
    }
}

アプリのカスタマイズページを開く

  1. クライアント アプリケーションは、まずカスタム ページ (例として「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"]    
        } 
    ]
}
  1. 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"]
    }
}

データを渡す

メッセージをプッシュすると、データフィールドを保持でき、ユーザーがメッセージをクリックすると、データ内のデータが次のメソッドを通じてクライアントアプリケーションに渡されます。

  1. メッセージをプッシュするときにデータフィールドを運びます。

• 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"]
    }
}
  1. クライアントアプリケーション開発では、メッセージをクリックするとデータフィールド関数を取得するページにジャンプしますが、ここでは例としてメッセージをクリックするとアプリケーションホームページ(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の最新技術情報を初めて学びましょう~

おすすめ

転載: blog.csdn.net/HUAWEI_HMSCore/article/details/131227551