AWS SNS를 사용한 FCM


94

나는 AWS내 안드로이드 프로젝트에 리소스를 사용하고 있으며, 내 프로젝트에 푸시 알림 서비스를 추가 할 계획 AWS SNS입니다. 나는 이것들에 대해 한두 가지를 제외하고는 어떤 질문도 찾지 못했지만 설명이 명확하지 않았습니다.

1. AWS지원 FCM합니까? SNS와 작업 GCM. 그러나 Google은 GCM. 나는 AWS지원을 찾지 못했습니다 FCM.

2. AWS푸시 알림을 보낸 후에도 메시지 (또는 데이터)를 데이터베이스에 저장합니까?

3. SNS 애플리케이션 플랫폼에 FCM API 키를 넣으려고했는데 잘못된 매개 변수가 표시되는 이유는 무엇입니까?


SNS는 아직 FCM을 지원하지 않으며 더 이상 사용되지 않는 GCM 버전을 사용합니다. API 키는 어디서 얻습니까?
Arthur Thompson

1
제가 시도한 것은 FCM의 api key를 SNS에 넣으려고했는데 작동하지 않아서 AWS (SNS)에서 문서를 읽은 후 서버 키를 넣어달라고 언급했습니다. 나는 잘 작동했다. FCM 용 SNS를 통해 푸시 알림을 보낼 수 있습니다. 그것이 작동하는 이유를 정확히 모릅니다. SNS가 현재 FCM을 지원하지 않는 것이 확실합니까?
Naroju

GCM (현재 FCM) 메시지를 전송하려면 서버 키가 필요합니다. 클라이언트 측 (휴대 기기)에서 GCM과 FCM은 일반적으로 동일하므로 둘 다 예상 된 방식으로 메시지를 수신합니다. 그러나 작동하지 않는 FCM 기능이 있습니다 (예 : 주제 메시징).
Arthur Thompson

fmc에서 sns 토픽을 사용할 수 있습니까? 같은 멋진 답변을 주셔서 감사합니다
후안 호세 Tugores에게

처음에 SNS를 사용하면 어떤 이점이 있습니까? FCM으로 충분하지 않습니까?
Khaled Osman

답변:


188

FCM은 GCM과 역 호환됩니다. AWS에서 FCM을 설정하는 단계는 GCM 설정 절차 와 동일 하며 (적어도 현재는) FCM이 서버 측 구성과 관련하여 GCM 및 SNS와 투명하게 작동합니다.

그러나data 페이로드를 Android 장치 로 보내는 경우 확장 되는 클라이언트 측 서비스 를 구현하지 않으면 페이로드가 처리되지 않습니다 FirebaseMessagingService. AWS 콘솔의 기본 JSON 메시지 생성기 data는 앞서 언급 한 서비스가 구현되지 않는 한 앱에서 무시되는 메시지를 보냅니다 . 초기 테스트를 위해이 문제를 해결하기 위해 notification장치에서 수신 할 사용자 지정 페이로드를 제공 할 수 있습니다 (앱이 포 그라운드에 있지 않은 경우).

있다 GCM-FCM 마이그레이션 지침 Google에서 제공하는 그러나 당신이해야 변경 사항이 앱 측에 주로있다.

SNS를 통해 앱에서 GCM / FCM을 테스트하기 위해 따라야하는 단계는 다음과 같습니다.

  1. 크리에이트 SNS에서 플랫폼 응용 프로그램 은 AS Google 클라우드 메시징 (GCM)를 선택, 푸시 알림 플랫폼 , 그리고 제공하는 서버 API 키 에서 API 키 필드.
  2. 플랫폼 애플리케이션을 선택하고 플랫폼 엔드 포인트 생성 버튼을 클릭합니다.
  3. 앱에서 생성 한 InstanceID ( Device Token )를 제공합니다 . Android 앱 내에서이를 보려면 메서드를 확장 FirebaseInstanceIDService하고 재정의 해야합니다 onTokenRefresh. 이 작업을 마치면 , 제거를하고 응용 프로그램을 다시 설치하고 토큰은 첫 번째 부팅에 안드로이드 Studio에서 디버그 콘솔에 인쇄해야합니다.
  4. 엔드 포인트 추가 버튼을 클릭 합니다.
  5. 플랫폼 애플리케이션에 대한 ARN 링크를 클릭하십시오.
  6. 장치에 대해 새로 생성 된 엔드 포인트를 선택하고 엔드 포인트에 게시 버튼을 클릭합니다.
  7. json으로 선택 메시지 형식을 하고 클릭 JSON 메시지 생성 버튼을 클릭합니다.
  8. 테스트 메시지를 입력하고 JSON 생성을 클릭합니다. 버튼을 합니다.
  9. 이제 "gotcha 부분"이 나옵니다.

SNS에서 생성되는 메시지는 다음과 같은 형식입니다.

{
"GCM": "{ \"data\": { \"message\": \"test message\" } }"
}

앞서 언급했듯이 data페이로드를 수신 할 서비스가 구현되지 않은 경우 페이로드는 무시됩니다. 너무 많은 코드를 작성하지 않고 테스트하고 notification싶으 므로 대신 페이로드를 보내야합니다 . 이렇게하려면 JSON 메시지를 읽기로 변경하면됩니다.

{
"GCM": "{ \"notification\": { \"text\": \"test message\" } }"
}

이 작업을 마치면 앱이 장치에서 실행되고 있지 않은지 확인하고 메시지 게시 버튼을 누르십시오. 이제 장치에 알림 팝업이 표시됩니다.

물론 Amazon SNS API를 통해이 모든 작업을 프로그래밍 방식으로 수행 할 수 있지만 모든 예제는 data페이로드 를 사용하는 것으로 보이 므로이를 염두에두고 사용 사례에 적합한 페이로드를 생성해야합니다.


2
훌륭한 대답, 감사합니다. json에는 구성 옵션과 관련하여 약간의 깊이가 있다는 점은 주목할 가치가 있습니다. FCM 관련 기능을 테스트하지는 않았지만 developers.google.com/cloud-messaging/concept-options를 참조하세요 .

data클라이언트 앱이 FCM이 아닌 GCM을 구현하더라도 sns를 사용하면 메시지가 제대로 작동합니다. 내 앱에서는 클라이언트 측에서 FCM으로 업그레이드하지 않았지만 SNS를 사용하는 FCM은 data메시지에도 잘 작동합니다 . 작동하지 않습니까?
Sash_KP

2
SNS는 GCM을 사용하므로 GCM 클라이언트를 사용하는 경우 정상적으로 작동해야합니다 (Google이 GCM을 폐기하기로 결정할 때까지). 이 질문은 AWS의 FCM 지원 (Google API 측의 하위 호환성을 통해 지원됨)과 더 관련이 있습니다.
Nathan Dunn

fmc에서 sns 토픽을 사용할 수 있습니까? 같은 멋진 답변을 주셔서 감사합니다
후안 호세 Tugores에게

환영합니다. 예, 평소처럼 SNS 주제에 대한 모바일 푸시 (예 : GCM-> FCM) 엔드 포인트를 개별적으로 구독 할 수 있지만 이렇게하면 AWS 내에서 많은 수의 메시지가 생성됩니다. FCM 클라이언트 측을 사용하는 경우 또 다른 대안은 Google 서버를 통해서만 이동하는 FCM 주제 또는 사용자 세그먼트를 사용하는 것입니다
Nathan Dunn

14

이제 firebase 콘솔 ( https://console.firebase.google.com/ ) 로 이동 하여 프로젝트를 선택하고 톱니 바퀴 아이콘을 클릭하고 프로젝트 설정을 선택한 다음 클라우드 메시징 탭을 클릭합니다.

GCM API 키인 기존 서버 키가 표시되며 FCM 버전 인 새 서버 키를 생성 할 수있는 옵션이 있습니다.

SNS는 두 버전을 모두 허용하지만 메뉴 옵션은 여전히 ​​GCM으로 분류됩니다.

다음은 참고 용 사진입니다.

여기에 이미지 설명 입력

서버 키를 "실수로"제거 할 수 있지만 레거시 서버 키는 삭제할 수 없습니다. 또한 서버 키 추가 버튼을 클릭하면 경고없이 첫 번째 키 아래에 새 서버 키가 표시됩니다! ... 좋은 Google;)


5

데이터 대신 알림 페이로드로 솔루션을 사용하려고했지만 모바일 장치에서 푸시 알림을받지 못했습니다. 이 튜토리얼 https://youtu.be/iBTFLu30dSg 는 AWS SNS에서 FCM을 단계별로 사용하는 방법에 대한 영어 자막과 AWS 콘솔에서 푸시 알림을 보내고 aws php sdk를 사용하여 PHP에서 구현하는 방법에 대한 예제가 포함되어 있습니다. 많은 도움이되었습니다.


5

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)
    {
    }
}

FCM 토큰은 어디에 있습니까?
JPM

페이로드에 이미지 URL을 보내려면 어떻게해야합니까?
tarek noaman

3

Nathan Dunn의 답변에 대한 추가 참고 사항 : 사운드를 추가하려면 다음 JSON 메시지를 사용하십시오.

{
"GCM": "{ \"notification\": { \"text\": \"test message\",\"sound\":\"default\" } }"
}

페이로드에 이미지 URL을 보내려면 어떻게해야합니까?
tarek noaman

0

올바른 페이로드 (주제에 게시)로 알림을 보내는 방법을 알아내는 데 시간이 걸렸습니다. 그래서 여기에 넣겠습니다.

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);
}    


0

질문에 답하려면 :

  1. AWS SNS는 FCM을 지원합니다.
  2. AWS는 푸시 알림을 보낸 후 메시지를 저장하지 않습니다.

SNS로 FCM을 설정하는 방법에 대한 자세한 자습서는 이 문서를 참조하세요.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.