2017-09-13 4 views
0

AWS 관리 콘솔을 통해 푸시 메시지를 보내는 것은 JSON message generator을 사용하여 올바르게 작동합니다. 그러나 내가 publish() 함수를 호출 할 때마다 메시지는 결코 전화에 도달하지 않습니다. 아이폰 OS에boto3 client publish (AWS SNS)를 사용하여 GCM/Firebase를 통해 Android 기기로 푸시 메시지를 보내는 방법

출판과 같이 잘 작동합니다 :

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이 잘못되어 이런 식으로 작동하지 않습니다! 아마 이것은 언급되어야한다.

각 전송 프로토콜에 대해 서로 다른 메시지를 보내려면

를 JSON과 메시지 매개 변수에 대한 JSON 객체를 사용하도록 MessageStructure 매개 변수의 값을 설정합니다.

아니요, Message 매개 변수에는 JSON 객체를 사용할 수 없습니다. 매개 변수는 여전히 문자열 객체 여야합니다. 그러나 구문 분석 가능한 JSON을 포함해야합니다. 이것은 다시 말해야한다.

해야 메시지 파라미터의 값 :이

  • 가 문법적으로 올바른 JSON 개체 일;

  • 에는 문자열 인 값이 "default"인 최상위 JSON 키가 적어도 포함되어 있습니다.

어느 쪽도 맞지 않습니다.

또 다른 json.dumps()이 JSON 개체 내에 필요하다는 사실은 어디에도 없습니다. 위의 예와 같은 간단한 예가 해당 문서의 놀라운 부분을 도왔을 것입니다.