나는 AWS
내 안드로이드 프로젝트에 리소스를 사용하고 있으며, 내 프로젝트에 푸시 알림 서비스를 추가 할 계획 AWS SNS
입니다. 나는 이것들에 대해 한두 가지를 제외하고는 어떤 질문도 찾지 못했지만 설명이 명확하지 않았습니다.
1. AWS
지원 FCM
합니까? SNS
와 작업 GCM
. 그러나 Google은 GCM
. 나는 AWS
지원을 찾지 못했습니다 FCM
.
2. AWS
푸시 알림을 보낸 후에도 메시지 (또는 데이터)를 데이터베이스에 저장합니까?
3. SNS 애플리케이션 플랫폼에 FCM API 키를 넣으려고했는데 잘못된 매개 변수가 표시되는 이유는 무엇입니까?
답변
FCM은 GCM과 역 호환됩니다. AWS에서 FCM을 설정하는 단계는 GCM 설정 절차 와 동일 하며 (적어도 현재는) FCM이 서버 측 구성과 관련하여 GCM 및 SNS와 투명하게 작동합니다.
그러나data
페이로드를 Android 장치 로 보내는 경우 확장 되는 클라이언트 측 서비스 를 구현하지 않으면 페이로드가 처리되지 않습니다 FirebaseMessagingService
. AWS 콘솔의 기본 JSON 메시지 생성기 data
는 앞서 언급 한 서비스가 구현되지 않는 한 앱에서 무시되는 메시지를 보냅니다 . 초기 테스트를 위해이 문제를 해결하기 위해 notification
장치에서 수신 할 사용자 지정 페이로드를 제공 할 수 있습니다 (앱이 포 그라운드에 있지 않은 경우).
있다 GCM-FCM 마이그레이션 지침 Google에서 제공하는 그러나 당신이해야 변경 사항이 앱 측에 주로있다.
SNS를 통해 앱에서 GCM / FCM을 테스트하기 위해 따라야하는 단계는 다음과 같습니다.
- 크리에이트 SNS에서 플랫폼 응용 프로그램 은 AS Google 클라우드 메시징 (GCM)를 선택, 푸시 알림 플랫폼 , 그리고 제공하는 서버 API 키 에서 API 키 필드.
- 플랫폼 애플리케이션을 선택하고 플랫폼 엔드 포인트 생성 버튼을 클릭합니다.
- 앱에서 생성 한 InstanceID ( Device Token )를 제공합니다 . Android 앱 내에서이를 보려면 메서드를 확장
FirebaseInstanceIDService
하고 재정의 해야합니다onTokenRefresh
. 이 작업을 마치면 , 제거를하고 응용 프로그램을 다시 설치하고 토큰은 첫 번째 부팅에 안드로이드 Studio에서 디버그 콘솔에 인쇄해야합니다. - 엔드 포인트 추가 버튼을 클릭 합니다.
- 플랫폼 애플리케이션에 대한 ARN 링크를 클릭하십시오.
- 장치에 대해 새로 생성 된 엔드 포인트를 선택하고 엔드 포인트에 게시 버튼을 클릭합니다.
- json으로 선택 메시지 형식을 하고 클릭 JSON 메시지 생성 버튼을 클릭합니다.
- 테스트 메시지를 입력하고 JSON 생성을 클릭합니다. 버튼을 합니다.
- 이제 “gotcha 부분”이 나옵니다.
SNS에서 생성되는 메시지는 다음과 같은 형식입니다.
{
"GCM": "{ \"data\": { \"message\": \"test message\" } }"
}
앞서 언급했듯이 data
페이로드를 수신 할 서비스가 구현되지 않은 경우 페이로드는 무시됩니다. 너무 많은 코드를 작성하지 않고 테스트하고 notification
싶으 므로 대신 페이로드를 보내야합니다 . 이렇게하려면 JSON 메시지를 읽기로 변경하면됩니다.
{
"GCM": "{ \"notification\": { \"text\": \"test message\" } }"
}
이 작업을 마치면 앱이 장치에서 실행되고 있지 않은지 확인하고 메시지 게시 버튼을 누르십시오. 이제 장치에 알림 팝업이 표시됩니다.
물론 Amazon SNS API를 통해이 모든 작업을 프로그래밍 방식으로 수행 할 수 있지만 모든 예제는 data
페이로드 를 사용하는 것으로 보이 므로이를 염두에두고 사용 사례에 적합한 페이로드를 생성해야합니다.
답변
이제 firebase 콘솔 ( https://console.firebase.google.com/ ) 로 이동 하여 프로젝트를 선택하고 톱니 바퀴 아이콘을 클릭하고 프로젝트 설정을 선택한 다음 클라우드 메시징 탭을 클릭합니다.
GCM API 키인 기존 서버 키가 표시되며 FCM 버전 인 새 서버 키를 생성 할 수있는 옵션이 있습니다.
SNS는 두 버전을 모두 허용하지만 메뉴 옵션은 여전히 GCM으로 분류됩니다.
다음은 참고 용 사진입니다.
서버 키를 “실수로”제거 할 수 있지만 레거시 서버 키는 삭제할 수 없습니다. 또한 서버 키 추가 버튼을 클릭하면 경고없이 첫 번째 키 아래에 새 서버 키가 표시됩니다! … 좋은 Google;)
답변
데이터 대신 알림 페이로드로 솔루션을 사용하려고했지만 모바일 장치에서 푸시 알림을받지 못했습니다. 이 튜토리얼 https://youtu.be/iBTFLu30dSg 는 AWS SNS에서 FCM을 단계별로 사용하는 방법에 대한 영어 자막과 AWS 콘솔에서 푸시 알림을 보내고 aws php sdk를 사용하여 PHP에서 구현하는 방법에 대한 예제가 포함되어 있습니다. 많은 도움이되었습니다.
답변
Nathan Dunn의 훌륭한 답변에 대한 추가 메모. SNS에서 Firebase로 알림과 함께 데이터를 보내는 방법.
Json (알림 내부)에 데이터를 추가해야합니다.
{
"default": “any value",
"GCM": "{ \"notification\": { \"body\": \”message body\”, \”title\”: \”message title \”, \"sound\":\"default\" } , \"data\" : {\”key\" : \”value\", \”key2\" : \”value\” } }”
}
FirebaseMessagingService 구현에서 (Xamarin 예)
public override void OnMessageReceived(RemoteMessage message)
{
try
{
var body = message?.GetNotification()?.Body;
var title = message?.GetNotification()?.Title;
var tag = message?.GetNotification()?.Tag;
var sound = message?.GetNotification()?.Sound;
var data = message?.Data
foreach (string key in data.Keys)
{
// get your data values here
}
}
catch (Exception e)
{
}
}
답변
Nathan Dunn의 답변에 대한 추가 참고 사항 : 사운드를 추가하려면 다음 JSON 메시지를 사용하십시오.
{
"GCM": "{ \"notification\": { \"text\": \"test message\",\"sound\":\"default\" } }"
}
답변
올바른 페이로드 (주제에 게시)로 알림을 보내는 방법을 알아내는 데 시간이 걸렸습니다. 그래서 여기에 넣겠습니다.
private void PublishToTopic(string topicArn)
{
AmazonSimpleNotificationServiceClient snsClient =
new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.EUWest1);
PublishRequest publishRequest = new PublishRequest();
publishRequest.TopicArn = topicArn;
publishRequest.MessageStructure = "json";
string payload = "\\\"data\\\":{\\\"text\\\":\\\"Test \\\"}";
publishRequest.Message = "{\"default\": \"default\",\"GCM\":\"{" + payload + "}\"}";
PublishResponse publishResult = snsClient.Publish(publishRequest);
}