2017-09-13 17 views
0

AWS管理コンソールでプッシュメッセージを送信すると、JSON message generatorを使用して正常に動作します。しかし、私がpublish()関数を呼び出すたびに、メッセージは決して電話に届きません。 iOS版へboto3 client publish(AWS SNS)を使用してGCM/Firebaseを介してアンドロイドデバイスにプッシュメッセージを送信する方法

出版はそうのようなだけで正常に動作:

import boto3 

client = boto3.client('sns', region_name=REGION_NAME) 
client.publish(TargetArn=SOME_VALID_ARN, Message='This message gets pushed to iOS') 

だけでは動作しませんGCM/Firebaseエンドポイントでこれを行います。私はjson.dumps()またはマニュアル引用符を組み合わせてエスケープするばかげた量を試しました。

私はこの質問が時間と欲求不満を救うことを願っています。実際に動作

答えて

1

パブリッシュ呼び出しがjson.dumpsを入れ子にTWOを必要とします:

client.publish(TargetArn=ARN, MessageStructure='json', Message=json.dumps({'GCM': json.dumps('This finally gets delivered to Android')})) 

まず、the boto3 SNS documentation of the publish() functionはかなり混乱して:

すべてに同じメッセージを送信したい場合トランスポートプロトコルは、メッセージのテキストを文字列値として含めます。

ほとんどすべてのアンドロイドデバイスが使用するトランスポートプロトコルであるGCMが間違っていますが、この方法では機能しません。たぶんこれは言及されるべきです。

あなたは、各トランスポートプロトコルのために異なるメッセージを送信する場合は、をJSONとMessageパラメータのためのJSONオブジェクトを使用するMessageStructureパラメータの値を設定します。

いいえ、メッセージパラメータにはJSONオブジェクトを使用できません。パラメータはまだ文字列オブジェクトである必要があります。しかし、それは解析可能なJSONを含む必要があります。これは言い直されるべきです。

Messageパラメータの値がなければなりません:

  • は、構文的に有効なJSONオブジェクトです。

  • 文字列の値を持つ少なくとも "トップレベル"のJSONキーが含まれています。

どちらの点も真です。

また、別のjson.dumps()がJSONオブジェクト内に必要であるという事実はどこにもありません。上記のような簡単な例は、そのドキュメントの驚異を助けてくれました。

関連する問題