AWS SNSを使用したFCM


94

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

1. AWSサポートはありFCMますか?SNSで動作しGCMます。ただし、Googleではの代わりにFCMを使用することをお勧めしますGCM。私はAWS支持を見つけませんでしたFCM

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

3.SNSアプリケーションプラットフォームにFCM APIキーを入れてみましたが、なぜ無効なパラメーターが表示されますか?


SNSはまだFCMをサポートしていません。非推奨バージョンのGCMを使用しています。APIキーはどこから入手していますか?
Arthur Thompson

1
私が試したのは、FCMのAPIキーをSNSに入れようとしたところ、機能しませんでした。AWS(SNS)でドキュメントを読んだ後、サーバーキーを入れるように言われました。うまくいきました。FCMのSNSからプッシュ通知を送信できます。それが機能した理由を正確に知らない。現在、SNSはFCMをサポートしていませんか?
Naroju

GCM(現在はFCM)メッセージを送信するには、サーバーキーが必要であることが正しいです。クライアント側(モバイルデバイス)では、GCMとFCMは通常同じであるため、どちらも期待どおりにメッセージを受信します。ただし、機能しないFCM機能がいくつかあります。例:トピックメッセージング。
Arthur Thompson

fmcでsnsトピックを使用することは可能ですか?そのような素晴らしい答えをありがとう
ファンホセトゥゴレス

そもそもSNSを使うメリットは何ですか?FCMで十分ではありませんか?
Khaled Osman

回答:


187

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

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

ありGCM-FCMの移行手順 Googleが提供するには、しかし、あなたが作る必要がある変更はアプリケーション側で主にされています。

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

  1. 作成SNSでのプラットフォームのアプリケーションをとしてGoogleクラウドメッセージング(GCM)を選択し、プッシュ通知プラットフォーム、およびご提供するサーバーのAPIキーAPIキーフィールドを。
  2. プラットフォームアプリケーションを選択し、[ プラットフォームエンドポイント作成 ]ボタンをクリックします。
  3. アプリによって生成されたInstanceID(デバイストークン)を提供します。Androidアプリ内でこれを表示するには、FirebaseInstanceIDServiceを拡張してonTokenRefreshメソッドをオーバーライドする必要があります。これを実行したら、アプリをアンインストールして再インストールすると、初回起動時にトークンがAndroid Studioのデバッグコンソールに出力されます。
  4. [ エンドポイント追加 ]ボタンをクリックします。
  5. プラットフォームアプリケーションのARNリンクをクリックします。
  6. デバイス用に新しく作成されたエンドポイントを選択し、[ エンドポイントに公開 ]ボタンをクリックします。
  7. JSON Message Formatを選択し、JSONメッセージジェネレータボタンをクリックします。
  8. テストメッセージを入力し、[ JSON生成 ]ボタンをクリックします。
  9. ついに「ごちゃごちゃパーツ」が登場。

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

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

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

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

これを実行したら、アプリがデバイスで実行されていないことを確認し、[ メッセージ公開 ]ボタンをクリックします。デバイスに通知ポップアップが表示されます。

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


2
素晴らしい答え、ありがとう。jsonには設定オプションに関してある程度の深みがあることは注目に値します- 私はFCM固有の機能をテストしていませんが、developers.google.com / cloud-messaging / concept- optionsを参照してください。
トム

dataクライアントアプリがFCMではなくGCMを実装していない場合でも、メッセージはsnsを使用して正常に機能しています。私のアプリでは、クライアント側でFCMにアップグレードしていませんが、SNSを使用したFCMはdataメッセージに対しても正常に機能します。うまくいきませんか?
Sash_KP 2017年

2
SNSはGCMを使用するため、GCMクライアントを使用している場合は、通常どおりに動作するはずです(GoogleがGCMを廃止することを決定するまで)。この質問は、AWSでのFCMサポート(Google API側での下位互換性を介してサポートされます)に関連しています
Nathan Dunn

fmcでsnsトピックを使用することは可能ですか?そのような素晴らしい答えをありがとう
ファンJose Tugores

ようこそ-はい、通常どおりモバイルプッシュ(GCM-> FCMなど)エンドポイントをSNSトピックにサブスクライブできますが、これによりAWS内で多数のメッセージが生成されます。FCMクライアント側を使用している場合、別の代替手段は、Googleのサーバーのみを通過するFCMトピックまたはユーザーセグメントを使用することです
Nathan Dunn

14

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

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

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

あなたの参照のための画像はここにあります:

ここに画像の説明を入力してください

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


5

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


5

ネイサンダンのすばらしい答えに対するもう1つの追加メモ。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)
    {
    }
}

FCMトークンはどこにありますか?
JPM

ペイロードで画像URLを送信する方法
tarek noaman

3

ネイサンダンの回答への追加のメモ:サウンドを追加するには、次のJSONメッセージを使用します

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

ペイロードで画像URLを送信する方法
tarek noaman

0

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

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

質問に答えるには:

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.