48

私はandroidプロジェクトのためにAWSのリソースを使用しています。私はAWS SNSというプロジェクトでプッシュ通知サービスを追加する予定です。多くの質問があります。 1つか2つを除いて、これらについては何の質問も見つけられませんでしたが、不明瞭な説明がありました。FCM with AWS SNS

1.Do AWSサポートFCMSNSGCMで動作します。しかし、GCMの代わりにFCMを使用することをおすすめします。 FCMをサポートするAWSが見つかりませんでした。

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

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

+0

、それは推奨されないを使用していますGCMのバージョンどこからAPIキーを取得していますか? –

+1

私が試したのは、FCMのapiキーをSNSに入れようとしましたが、うまくいきませんでした.AWS(SNS)の文書を読んだ後に、サーバーキーを置くよう言いました。私はうまくいった。 FCMのSNS経由でプッシュ通知を送信できます。その理由を正確に知りません。 SNSが現在FCMをサポートしていないと確信していますか? – Naroju

+0

GCM(現在のFCM)メッセージを送信するにはサーバーキーが必要です。クライアント側(モバイルデバイス)では、GCMとFCMは一般に同じであるため、両方とも期待される方法でメッセージを受信します。しかし、動作しないFCMの機能がいくつかあります(例:トピックメッセージング)。 –

答えて

102

FCMはGCMと下位互換性があります。 AWSでFCMを設定する手順は、GCM set up procedureと同じです(少なくとも現時点ではFCMはGCMとSNSを透過的に処理します)。しかし

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

Googleが提供するGCM-FCM migration instructionsがありますが、主にApp側にあります。

あなたがSNSで自分のアプリにGCM/FCMをテストするために必要な手順は以下のとおりです。

  1. プッシュ通知プラットフォームとしてGoogleクラウドメッセージング(GCM)を選択し、Platform Application in SNSを作成し、あなたを提供しますServer API keyAPIキーフィールド。
  2. プラットフォームアプリケーションを選択し、プラットフォームエンドポイントの作成ボタンをクリックします。
  3. アプリで生成されたInstanceID(デバイストークン)を入力します。 FirebaseInstanceIDServiceを拡張し、onTokenRefreshメソッドをオーバーライドしてAndroidアプリ内でこれを確認する必要があります。 have done thisになったら、アプリをアンインストールして再インストールし、最初の起動時にAndroid Studioのデバッグコンソールにトークンを印刷する必要があります。
  4. エンドポイントを追加するボタンをクリックします。
  5. プラットフォームアプリケーションのARNリンクをクリックします。
  6. デバイスの新しく作成されたエンドポイントを選択し、エンドポイントに公開ボタンをクリックします。
  7. JSON メッセージフォーマットを選択し、JSONメッセージジェネレータボタンをクリックします。
  8. テストメッセージを入力してをクリックします。ボタン
  9. "gotcha part"が表示されます。

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

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

我々は先に述べたように、それらを受け取るために何のサービスが実装されていない場合、dataペイロードは無視されます。多すぎるコードを記述することなくテストしたいので、代わりにnotificationペイロードを送信する必要があります。これが完了したら、あなたのアプリがデバイス上で実行されていないことを確認し、

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

、およびがMessageボタンを公開ヒット:これを行うには、単に読んでJSONメッセージを変更します。これで、デバイスに通知ポップアップが表示されます。

これはもちろん、Amazon SNS APIを使用してプログラム的に行うこともできますが、すべての例ではdataペイロードが使用されているように見えるので、ユースケースに合わせてペイロードを生成する必要があります。ネイサン・ダンの回答に

+1

華麗な答え、ありがとう。 FCM固有の機能はテストしていませんが、jsonには設定オプションに関する深みがあります(https://developers.google.com/cloud-messaging/concept-optionsを参照)。 – Tom

+0

クライアントアプリケーションがFCMではなくGCMを実装していても、 'data'メッセージはsnsを使って正常に動作しています。私のアプリでは、私はクライアント側でFCMにアップグレードしていませんが、SNSを使用しているFCMも 'data'メッセージでうまく動作します。それは動作してはいけませんか? –

+1

SNSはGCMを使用しているため、GCMクライアントを使用している場合、通常どおり動作します(GoogleがGCMをリタイアするまで)。この質問は、AWSのFCMサポート(Google API側での下位互換性を介してサポートされています)ともっと関係しています –

2

ただ、追加の注記:今、あなたのfirebaseコンソール(https://console.firebase.google.com/)に行くことができます

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

音の使用に、次のJSONメッセージを追加するには、プロジェクトを選択し、歯車アイコンをクリックして、[プロジェクト]を選択設定は、その後、

あなたはGCM APIキーでレガシーサーバキーが表示されます...クラウドメッセージング]タブをクリックすると、FCMバージョンです新しいサーバ鍵を生成するオプションがあるでしょう

SNS w病気の両方のバージョンを受け入れるが、そのメニューオプションは、まだここ

GCMの下に分類されることはあなたの参照のための写真です:あなたは「偶然」あなたのサーバーキーを削除することができます

enter image description here

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

4

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

0

Nathan Dunnの偉大な答えにもう1つ追加のメモ。 通知があるデータをSNSからFirebaseに送信する方法。

我々は(通知内側)JSONにデータを追加する必要が

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

あなたFirebaseMessagingService実装(Xamarin例)でSNSはまだFCMをサポートしていません

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) 
    { 
    } 
} 
関連する問題