AmazonSNSとFirebaseを使ってSNSコンポーネントでプッシュ通知
AWS SNSコンポーネントを使用してAndroidアプリへプッシュ通知メッセージを送信してみます。以前はGoogle Cloud Messagingを使用していましたが、Firebaseが強く推奨されていますのでこちらを使用します。
Firebaseの設定
まずFirebaseのコンソールでプロジェクトを追加します。
ダイアログに「プロジェクト名」と「国/地域」を設定して追加します。
プロジェクトが追加されたらAndroidアプリでテストしたいので「AndroidアプリにFirebaseを追加」をクリックします。
Androidパッケージ名は、開発しているAndroidアプリのパッケージを指定してあげます。
SHA-1はAndroidアプリの開発環境でJDK1.8.0.161を使ってデバッグ用を作成しました。
設定ファイルのgoogle-services.jsonをダウンロードしてとっておきます。後で開発するAndroidアプリのappフォルダ直下に置きます。
開発するAndroidアプリのbuild.gradleを指定のように修正する必要があります。
Firebaseコンソールでプロジェクトの設定/クラウトメッセージングを開いて
プロジェクト認証情報/サーバーキーのトークンをコピーしておきます。
Firebaseで設定することは以上です。
Android Studio
Android Studioを使用してSNSからメッセージを受け取るAndroidアプリを作成します。
プロジェクトを作成します。
今回はAPI 23: Android6.0(Marshmallow)以上を選択します。
空で作ります。
プロジェクトのフォルダが作成できたら、さっそく先ほどダウンロードしたgoogle-services.jsonをappフォルダ下に移動します。
build.gradleも修正しておきます。
SDKのバージョンを変更して、firebaseのcompile行を追加します。
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
buildToolsVersion "27.0.3"
defaultConfig {
applicationId "com.infoteria.snsapp"
minSdkVersion 23
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.google.firebase:firebase-core:11.8.0'
compile "com.google.firebase:firebase-messaging:11.8.0"
compile 'com.android.support:support-v4:27.1.0'
compile 'com.android.support:support-compat:27.1.0'
compile 'com.android.support:appcompat-v7:27.1.0'
compile 'com.android.support:animated-vector-drawable:27.1.0'
}
apply plugin: 'com.google.gms.google-services'
Android StudioのメニューTools/Firebaseからソースのチュートリアルを見れます。
Tokenを取得方法は
FirebaseInstanceId.getInstance().getToken();
このTokenはSNSでアプリケーションのエンドポイントで使用するトークンです。
Log.d(LOGNAME, "firebase instance token: " + FirebaseInstanceId.getInstance().getToken());
Firebaseのメッセージ受け取りは
FirebaseMessagingServiceクラスを作成し、onMessageReceivedで受け取ります。
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(LOGNAME, "From: " + remoteMessage.getFrom());
String messageBody = "Empty Message !";
if (remoteMessage.getData().size() > 0) {
Log.d(LOGNAME, "--Message Data--");
java.util.Map<String, String> message = remoteMessage.getData();
//長かろうが、短かろうが処理する
StringBuilder sb = new StringBuilder();
for (java.util.Map.Entry<String, String> entry : message.entrySet()) {
sb.append(entry.getKey()).append("=")
.append(entry.getValue()).append("\n");
}
messageBody = sb.toString();
} else if (remoteMessage.getNotification() != null) {
Log.d(LOGNAME, "--Notification Body--");
messageBody = remoteMessage.getNotification().getBody();
}
Log.d(LOGNAME, messageBody);
sendMessage(messageBody);
}
sendMessageメソッドでUIの方へ取得したメッセージを渡しています。
FirebaseMessagingServiceクラスはAndroidManifest.xmlへサービスとして追加しておきます。
<service
android:name=".SNSAppMessagingService"
android:label="SNSAppMessagingService" >
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
ビルドが通ったら、Android Studioの作業は以上になります。
Virtual Devicesでアプリを起動しておきます。
SNSの設定
FlowのSNSコンポーネントで全てできるので、AWS SNSダッシュボードで行う作業はとくにありません。
Flowの作成
1.まずSNSコンポーネントの動作のおさらい
- メッセージの送信はAWS SNSPublishコンポーネントで行うが対象はトピックのみである。
- メッセージはTextストリームのみ対応していてる。これはメッセージ形式Rowに対応しているがJSONには対応していないということ。
※SNSを操作できるAWSコネクションは作成済の前提です。
2.コンポーネントでやること
- AWS SNSCreateTopicコンポーネントでトピックを作成
「トピック名」プロパティに名前を設定し、実行後にトピックARNを外部変数セットなどに保持しておきます。
※トピックARNは後でSubscribeするときやPublishするときに使用します。
- AWS SNSCreateEndpointコンポーネントでアプリケーション(GCM)を作成
AWS SNSCreateEndpointコンポーネントをダブルクリックするとアプリケーションのリストが表示され、アプリケーション(GCM)を作成することができます。
アプリケーション名は任意ですが、APIキーはFirebaseコンソールからコピーしておいた「サーバーキーのトークン」を指定します。
- AWS SNSCreateEndpointコンポーネントでAndroidアプリが動作するデバイスのエンドポイントを作成
Androidデバイスでアプリ実行時に取得するトークンが必要になります。今回は簡単にログでトークンを出力するようにして、Android StudioのLogcatからコピーして取得します。
- AWS SNSSubscribeコンポーネントでトピックへエンドポイントをapplicationプロトコルのサブスクリプションとして登録
「トピックARN」プロパティ:保持しておいたトピックARNを指定
「プロトコル」プロパティ:「application」を選択
「エンドポイントARN」プロパティ:保持しておいたエンドポイントARNを指定
- AWS SNSPublishコンポーネントでプッシュ通知メッセージの送信
AWS SNSPublishコンポーネントで送信するメッセージをTextストリームで渡します。
「件名」プロパティはサブスクリプションのプロトコルがapplicationのときは使用されませんが、必須プロパティなので何か設定します。
Flowの準備は以上です。
Flowの実行
作成したFlowを順に実行していき、トピック、アプリケーション、エンドポイント、サブスクリプションを作成します。
最後にプッシュ通知メッセージを送信します。
「SNSPublish from Flow Component 22:34:45」というメッセージを送信しました。
Androidデバイスのでdefaultの値としてメッセージを受信できました。
SNSのコンポーネントからGCMと同じようにFirebaseのプロジェクトに設定されているAndroidアプリへプッシュ通知メッセージを送信することができました。
Author And Source
この問題について(AmazonSNSとFirebaseを使ってSNSコンポーネントでプッシュ通知), 我々は、より多くの情報をここで見つけました https://qiita.com/ArimitsuIshii/items/2f291f0c2de0a632a3d6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .