AndroidプロジェクトにAWS
リソースを使用しています。AWS SNS
を使用して、プロジェクトにプッシュ通知サービスを追加することを計画しています。 1つまたは2つを除き、これらに関する質問は見つかりませんでしたが、説明は明確ではありませんでした。
1. AWS
はFCM
をサポートしていますか? SNS
はGCM
と連携します。ただし、GoogleではGCM
の代わりにFCMを使用することをお勧めします。 AWS
をサポートするFCM
が見つかりませんでした。
2. AWS
は、プッシュ通知を送信した後でも、データベースにメッセージ(またはデータ)を保存しますか?
3. FCM APIキーをSNSアプリケーションプラットフォームに配置しようとしましたが、無効なパラメーターが表示されているのはなぜですか?
FCMはGCMと下位互換性があります。 AWSでFCMをセットアップする手順は GCMセットアップ手順 と同じであり、(少なくとも現時点では)FCMはサーバー側の構成に関してGCMおよびSNSと透過的に動作します。
ただし、、data
ペイロードをAndroidデバイスに送信する場合、FirebaseMessagingService
を拡張する クライアント側サービス を実装しない限り、それらは処理されません。 AWSコンソールのデフォルトのJSONメッセージジェネレーターはdata
メッセージを送信しますが、前述のサービスが実装されていない限り、アプリによって無視されます。初期テストのためにこれを回避するには、デバイスが受信するカスタムnotification
ペイロードを提供できます(アプリがフォアグラウンドにない限り)
GCM-FCM移行手順 がGoogleから提供されていますが、必要な変更は主にアプリ側にあります。
SNSを使用してアプリでGCM/FCMをテストするために必要な手順は次のとおりです。
FirebaseInstanceIDService
を拡張し、onTokenRefresh
メソッドをオーバーライドする必要があります。 これを実行した になったら、アプリをアンインストールして再インストールすると、初回起動時にAndroid Studioのデバッグコンソールにトークンが出力されます。SNSによって生成されるメッセージは次の形式になります。
{
"GCM": "{ \"data\": { \"message\": \"test message\" } }"
}
前述したように、data
ペイロードは、それらを受信するサービスが実装されていない場合は無視されます。あまり多くのコードを書かずにテストしたいので、代わりにnotification
ペイロードを送信する必要があります。これを行うには、JSONメッセージを次のように変更します。
{
"GCM": "{ \"notification\": { \"text\": \"test message\" } }"
}
これを行ったら、アプリがデバイス上で実行されていないことを確認し、Publish Messageボタンを押します。デバイスに通知がポップアップ表示されるはずです。
もちろん、このすべてをAmazon SNS APIを介してプログラムで実行できますが、すべての例でdata
ペイロードを使用しているように見えるため、そのことを念頭に置き、ユースケースに適したペイロードを生成する必要があります。
これで、firebaseコンソール( https://console.firebase.google.com/ )に移動し、プロジェクトを選択し、歯車アイコンをクリックしてプロジェクト設定を選択し、クラウドメッセージングタブをクリックします。 ..
GCM APIキーであるレガシーサーバーキーが表示され、FCMバージョンである新しいサーバーキーを生成するオプションがあります。
SNSは両方のバージョンを受け入れますが、それらのメニューオプションはまだGCMで分類しています
参照用の画像を次に示します。
サーバーキーを「誤って」削除することはできますが、レガシーサーバーキーは削除できません。また、サーバーキーの追加ボタンをクリックすると、警告なしで最初のサーバーキーの下に新しいサーバーキーが表示されます。 ...いい仕事グーグル;)
データの代わりに通知ペイロードを使用したソリューションを使用しようとしましたが、モバイルデバイスでプッシュ通知を受信しませんでした。このチュートリアルを見つけました https://youtu.be/iBTFLu30dSg AWS SNSでFCMを使用する方法の英語の字幕と、AWSコンソールからプッシュ通知を送信してphpに実装する方法の例aws php sdkを使用します。とても助かりました。
ネイサン・ダンの素晴らしい答えへのもう一つの追加のメモ。通知を含むデータを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)
{
}
}
Nathan Dunn's Answerへの追加メモ:サウンドを追加するには、次のJSONメッセージを使用します
{
"GCM": "{ \"notification\": { \"text\": \"test message\",\"sound\":\"default\" } }"
}
以前のコードはすべてGCMからFCMに移行されているため、AmazonはFCMをサポートしています。以下の記事で詳しく説明します。
適切なペイロード(トピックに公開)で通知を送信する方法を理解するのに時間がかかりました。だからここに入れます。
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);
}
質問に答えるには:
SNSでFCMを設定する詳細なチュートリアルについては、 この記事 を参照してください。