web-dev-qa-db-ja.com

AWS SNSを使用したFCM

AndroidプロジェクトにAWSリソースを使用しています。AWS SNSを使用して、プロジェクトにプッシュ通知サービスを追加することを計画しています。 1つまたは2つを除き、これらに関する質問は見つかりませんでしたが、説明は明確ではありませんでした。

1. AWSFCMをサポートしていますか? SNSGCMと連携します。ただし、GoogleではGCMの代わりにFCMを使用することをお勧めします。 AWSをサポートするFCMが見つかりませんでした。

2. AWSは、プッシュ通知を送信した後でも、データベースにメッセージ(またはデータ)を保存しますか?

3. FCM APIキーをSNSアプリケーションプラットフォームに配置しようとしましたが、無効なパラメーターが表示されているのはなぜですか?

87
Naroju

FCMはGCMと下位互換性があります。 AWSでFCMをセットアップする手順は GCMセットアップ手順 と同じであり、(少なくとも現時点では)FCMはサーバー側の構成に関してGCMおよびSNSと透過的に動作します。

ただし、dataペイロードをAndroidデバイスに送信する場合、FirebaseMessagingServiceを拡張する クライアント側サービス を実装しない限り、それらは処理されません。 AWSコンソールのデフォルトのJSONメッセージジェネレーターはdataメッセージを送信しますが、前述のサービスが実装されていない限り、アプリによって無視されます。初期テストのためにこれを回避するには、デバイスが受信するカスタムnotificationペイロードを提供できます(アプリがフォアグラウンドにない限り)

GCM-FCM移行手順 がGoogleから提供されていますが、必要な変更は主にアプリ側にあります。

SNSを使用してアプリでGCM/FCMをテストするために必要な手順は次のとおりです。

  1. SNSのプラットフォームアプリケーション を作成し、Google Cloud Messaging(GCM)をPush Notification Platformとして選択し、あなたの- =サーバーAPIキーAPIキーフィールド.
  2. プラットフォームアプリケーションを選択し、プラットフォームエンドポイントの作成ボタンをクリックします。
  3. アプリによって生成されたInstanceID(Device Token)を提供します。 Androidアプリ内でこれを確認するには、FirebaseInstanceIDServiceを拡張し、onTokenRefreshメソッドをオーバーライドする必要があります。 これを実行した になったら、アプリをアンインストールして再インストールすると、初回起動時にAndroid Studioのデバッグコンソールにトークンが出力されます。
  4. エンドポイントの追加ボタンをクリックします。
  5. プラットフォームアプリケーションのARNリンクをクリックします。
  6. デバイス用に新しく作成されたエンドポイントを選択し、エンドポイントに公開ボタンをクリックします。
  7. JSONMessage Formatを選択し、JSON message generatorボタンをクリックします。
  8. テストメッセージを入力し、JSONを生成ボタンをクリックします
  9. 次に、「落とし穴」の部分があります。

SNSによって生成されるメッセージは次の形式になります。

{
"GCM": "{ \"data\": { \"message\": \"test message\" } }"
}

前述したように、dataペイロードは、それらを受信するサービスが実装されていない場合は無視されます。あまり多くのコードを書かずにテストしたいので、代わりにnotificationペイロードを送信する必要があります。これを行うには、JSONメッセージを次のように変更します。

{
"GCM": "{ \"notification\": { \"text\": \"test message\" } }"
}

これを行ったら、アプリがデバイス上で実行されていないことを確認し、Publish Messageボタンを押します。デバイスに通知がポップアップ表示されるはずです。

もちろん、このすべてをAmazon SNS APIを介してプログラムで実行できますが、すべての例でdataペイロードを使用しているように見えるため、そのことを念頭に置き、ユースケースに適したペイロードを生成する必要があります。

171
Nathan Dunn

これで、firebaseコンソール( https://console.firebase.google.com/ )に移動し、プロジェクトを選択し、歯車アイコンをクリックしてプロジェクト設定を選択し、クラウドメッセージングタブをクリックします。 ..

GCM APIキーであるレガシーサーバーキーが表示され、FCMバージョンである新しいサーバーキーを生成するオプションがあります。

SNSは両方のバージョンを受け入れますが、それらのメニューオプションはまだGCMで分類しています

参照用の画像を次に示します。

enter image description here

サーバーキーを「誤って」削除することはできますが、レガシーサーバーキーは削除できません。また、サーバーキーの追加ボタンをクリックすると、警告なしで最初のサーバーキーの下に新しいサーバーキーが表示されます。 ...いい仕事グーグル;)

13
Reza

データの代わりに通知ペイロードを使用したソリューションを使用しようとしましたが、モバイルデバイスでプッシュ通知を受信しませんでした。このチュートリアルを見つけました https://youtu.be/iBTFLu30dSg AWS SNSでFCMを使用する方法の英語の字幕と、AWSコンソールからプッシュ通知を送信してphpに実装する方法の例aws php sdkを使用します。とても助かりました。

5
Arbron

ネイサン・ダンの素晴らしい答えへのもう一つの追加のメモ。通知を含むデータをSNSからFirebaseに送信する方法。

Jsonにデータを追加する必要があります(通知内):

{
    "default": “any value", 
     "GCM": "{ \"notification\": { \"body\": \”message body\”, \”title\”: \”message title \”, \"sound\":\"default\" } , \"data\" : {\”key\" : \”value\", \”key2\" : \”value\” } }”
}

FirebaseMessagingService実装(Xamarinの例)

public override void OnMessageReceived(RemoteMessage message)
{

    try
    {

        var body = message?.GetNotification()?.Body;
        var title = message?.GetNotification()?.Title;
        var tag = message?.GetNotification()?.Tag;
        var sound = message?.GetNotification()?.Sound;

        var data = message?.Data
        foreach (string key in data.Keys)
        {
            // get your data values here
        }

    }
    catch (Exception e)
    {
    }
}
4
Adys

Nathan Dunn's Answerへの追加メモ:サウンドを追加するには、次のJSONメッセージを使用します

{
"GCM": "{ \"notification\": { \"text\": \"test message\",\"sound\":\"default\" } }"
}
2

以前のコードはすべてGCMからFCMに移行されているため、AmazonはFCMをサポートしています。以下の記事で詳しく説明します。

Amazon発行の記事

0
Epistemologist

適切なペイロード(トピックに公開)で通知を送信する方法を理解するのに時間がかかりました。だからここに入れます。

private void PublishToTopic(string topicArn)
{
    AmazonSimpleNotificationServiceClient snsClient = 
           new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.EUWest1);
    PublishRequest publishRequest = new PublishRequest();
    publishRequest.TopicArn = topicArn;
    publishRequest.MessageStructure = "json";
    string payload = "\\\"data\\\":{\\\"text\\\":\\\"Test \\\"}";
    publishRequest.Message = "{\"default\": \"default\",\"GCM\":\"{" + payload + "}\"}";
    PublishResponse publishResult = snsClient.Publish(publishRequest);
}    
0
Alexey

質問に答えるには:

  1. AWS SNSはFCMをサポートします。
  2. プッシュ通知を送信した後、AWSはメッセージを保存しません。

SNSでFCMを設定する詳細なチュートリアルについては、 この記事 を参照してください。

0
N. S. Mehra