2017-09-13 103 views
0

通過AWS管理控制檯發送推送消息可以很好地使用JSON message generator。但是每當我打電話給publish()功能時,消息都不會到達手機。如何使用boto3客戶端通過GCM/Firebase將推送消息發送到Android設備發佈(AWS SNS)

發佈到iOS工作得很好,像這樣:

import boto3 

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

這樣做有GCM /火力地堡端點是行不通的。我嘗試了一個荒謬的數額json.dumps()或手動引號逃脫組合。

我希望這個問題可以節省一些時間和挫折。

回答

1

的發佈調用的實際工作需要嵌套json.dumps

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是一種幾乎所有的Android設備都使用的傳輸協議,不會這樣工作!也許這應該提到。

如果要爲每個傳輸協議發送不同的消息,設置MessageStructure參數的值,以JSON 並使用JSON對象的消息參數

不,您不能使用JSON對象作爲Message參數。該參數仍然需要是一個字符串對象。但它需要包含可分析的JSON。這應該重新編寫。

消息參數必須的值:

  • 是語法上有效的JSON對象;和

  • 至少包含頂級JSON密鑰「default」,其值爲字符串。

這兩點都不是真的。

此外,您在JSON對象內需要另一個json.dumps()這一事實並未提及。一個簡單的例子就像上面的那個例子會在那個文檔中產生奇蹟。

相關問題