A3Lでのトピックベースのメッセージング
A3Lでのトピックベースのメッセージング
トピックベースのメッセージングを使用すると、同じトピックをサブスクライブしているユーザーのグループにメッセージを送信できます。トピックベースのメッセージングを使用してメッセージを送信するには、AndroidデバイスまたはFire OSデバイスのアプリインスタンスがトピックをサブスクライブする必要があります。A3L Messagingは、Amazon Device Messaging(ADM)APIとFirebase Cloud Messaging(FCM)APIのsubscribeToTopic()
メソッドとunsubscribeFromTopic()
メソッドを抽象化します。
セキュリティプロファイルの登録
Fire OSデバイスの場合、ADMを介してトピックベースのメッセージングにセキュリティプロファイルを登録する必要があります。手順については、トピックベースのメッセージングへのセキュリティプロファイルの登録 を参照してください。FCMでトピックベースのメッセージングを使用する場合、この手順は必要ありません。
トピックのサブスクライブまたはサブスクライブ解除
アプリをADMまたはFCMのトピックをサブスクライブするには、A3L Messaging subscribeToTopic()
メソッドを呼び出し、それにトピック名を渡します。このメソッドはTask
を返します。次のコードに示すように、完了リスナーはこのTaskを使用して、サブスクライブが成功したかどうかを判断できます。
A3LMessaging . subscribeToTopic ( topic ). addOnCompleteListener (
new OnCompleteListener < Void >() {
@Override
public void onComplete ( @NonNull Task < Void > task ) {
String msg = "サブスクライブしました" ;
if (! task . isSuccessful ()) {
msg = "サブスクライブできませんでした" ;
}
Log . d ( TAG , msg );
}
}
);
アプリでADMまたはFCMのトピックのサブスクライブを解除するには、A3L Messaging unsubscribeFromTopic()
メソッドを呼び出し、それにトピック名を渡します。このメソッドはTask
を返します。次のコードに示すように、完了リスナーはこのTaskを使用して、サブスクライブの解除に成功したかどうかを判断できます。
A3LMessaging . unsubscribeFromTopic ( topic ). addOnCompleteListener (
new OnCompleteListener < Void >() {
@Override
public void onComplete ( @NonNull Task < Void > task ) {
String msg = "サブスクライブを解除しました" ;
if (! task . isSuccessful ()) {
msg = "サブスクライブを解除できませんでした" ;
}
Log . d ( TAG , msg );
}
}
);
サーバー側のスクリプトを使用したテスト方法
トピックベースのメッセージングをテストするには、サーバー側のスクリプトを使用してトピックにメッセージを送信します。
ADMSendMessageToTopic.py は、トピックベースのメッセージをFire OSデバイスに送信するPythonスクリプトです。
FCMSendMessageToTopic.py は、トピックベースのメッセージをAndroidデバイスに送信するPythonスクリプトです。
以下のボタンをクリックすると、スクリプトのコードを取得できます。テストメッセージを送信するには、このコードをコピーしてエディターに貼り付け、コメントに示されている値を更新します。その後、それぞれをpy.ファイルとして保存し、スクリプトを実行します。
ADMSendMessageToTopic.pyを表示/非表示
コードをコピー クリップボードにコピーされました。
ADMSendMessageToTopic.py
import requests
import json
# プッシュ通知を送信するには、以下の値を更新してください
# ADMメッセージの送信に使用するクライアントID
client_id = ""
# ADMメッセージの送信に使用するクライアントシークレット
client_secret = ""
# 通知の送信先となるトピック
topic = ""
notification = { "title" : "A3L通知" , "body" : "A3L通知はFire OSプラットフォームで動作します。" }
########### この行より下のコードは変更しないでください ##################
Auth_token_URL = "https://api.amazon.com/auth/O2/token"
auth_token_headers = { 'Content-Type' : 'application/x-www-form-urlencoded' , 'Accept-Charset' : 'application/x-www-form-urlencoded' }
auth_token_data = { 'grant_type' : 'client_credentials' , 'scope' : 'messaging:push' , 'client_id' : client_id , 'client_secret' : client_secret }
send_message_to_topic_url = "https://api.amazon.com/v1/messaging/topic/messages"
send_message_to_topic_headers = { 'Accept' : 'application/json' , 'Content-Type' : 'application/json' , 'x-amzn-type-version' : 'com.amazon.device.messaging.ADMMessage@1.0' , 'x-amzn-accept-type' : 'com.amazon.device.messaging.ADMSendResult@1.0' }
a3l_prefix = "a3l.notification."
def transformAndroidNotifcationToA3LNotification ( notification ):
a3l_notification = { "data" :{}}
for notification_key , notification_value in notification . items ():
a3l_notification [ "data" ][ a3l_prefix + notification_key ] = notification_value
return a3l_notification
def getAccessToken ():
r = requests . post ( Auth_token_URL , data = auth_token_data , headers = auth_token_headers )
json_response = r . json ()
auth_token = json_response [ "access_token" ]
return auth_token
def sendMessageToTopic ():
auth_token = "Bearer " + getAccessToken ()
send_message_to_topic_headers [ 'Authorization' ] = auth_token
send_message_data = transformAndroidNotifcationToA3LNotification ( notification )
send_message_data [ "topic" ] = topic
r = requests . post ( send_message_to_topic_url , data = json . dumps ( send_message_data ), headers = send_message_to_topic_headers )
print ( 'メッセージの送信に成功しました:' , r . json ())
sendMessageToTopic ()
FCMSendMessageToTopic.pyを表示/非表示
コードをコピー クリップボードにコピーされました。
FCMSendMessageToTopic.py
import firebase_admin
from firebase_admin import credentials
from firebase_admin import messaging
# プッシュ通知を送信するには、以下の値を更新してください
# これは、Firebaseサーバーの認証情報を含む
# 管理SDKのjsonファイルです。
admin_sdk_json_file = "path to admin sdk json file"
# 通知の送信先となるトピック
topic = ""
########### この行より下のコードは変更しないでください ##################
cred = credentials . Certificate ( admin_sdk_json_file )
firebase_admin . initialize_app ( cred )
def send_to_topic ():
message = messaging . Message (
notification = messaging . Notification (
title = 'A3L通知' ,
body = 'A3L通知はAndroidプラットフォームで機能しています。' ,
),
topic = topic
)
response = messaging . send ( message )
print ( 'メッセージの送信に成功しました:' , response )
send_to_topic ()
ソリューション固有のAPIを使用したテスト方法
ソリューション固有のAPIを使用して、トピックベースのメッセージングをテストすることもできます。ADM APIおよびFCM APIを使用してトピックにメッセージを送信する方法の詳細については、以下のガイドを参照してください。