FCM với AWS SNS


94

Tôi đang sử dụng AWStài nguyên cho dự án Android của mình, tôi đang có kế hoạch thêm dịch vụ thông báo đẩy cho dự án của mình với. AWS SNSCó một số câu hỏi làm phiền tôi nhiều. Tôi không tìm thấy bất kỳ câu hỏi nào liên quan đến những điều này, ngoại trừ một hoặc hai nhưng với những giải thích không rõ ràng.

1. có AWShỗ trợ FCMkhông? SNSlàm việc với GCM. Nhưng Google khuyến nghị sử dụng FCM thay vì GCM. Tôi không tìm thấy AWShỗ trợ FCM.

2.Lưu AWStrữ tin nhắn (hoặc dữ liệu) vào cơ sở dữ liệu của họ ngay cả sau khi gửi thông báo đẩy?

3.Tôi đã thử đặt khóa api FCM trong nền tảng ứng dụng SNS, tại sao nó lại hiển thị các thông số không hợp lệ?


SNS chưa hỗ trợ FCM, nó sử dụng phiên bản GCM không dùng nữa. Bạn lấy khóa API từ đâu?
Arthur Thompson

1
Những gì tôi đã thử là, tôi đã cố gắng đặt khóa api của FCM trong SNS và nó không hoạt động, Sau khi đọc tài liệu trong AWS (SNS) họ đã đề cập để đặt khóa máy chủ. Tôi đã thử nó hoạt động tốt. Tôi có thể gửi thông báo đẩy qua SNS cho FCM. Không biết lý do chính xác tại sao nó hoạt động. Bạn có chắc chắn rằng SNS hiện không hỗ trợ FCM không?
Naroju

Đúng là cần có khóa máy chủ để gửi tin nhắn GCM (hiện tại là FCM). Về phía máy khách (thiết bị di động) GCM và FCM nói chung là giống nhau nên cả hai đều sẽ nhận được tin nhắn theo cách mong đợi. Tuy nhiên, có một số tính năng FCM sẽ không hoạt động, ví dụ: nhắn tin theo chủ đề.
Arthur Thompson

có thể sử dụng chủ đề sns với fmc không? cảm ơn bạn đã có câu trả lời tuyệt vời như vậy
Juan Jose Tugores

lợi ích của việc sử dụng SNS ngay từ đầu là gì? FCM không phải là đủ?
Khaled Osman,

Câu trả lời:


187

FCM tương thích ngược với GCM. Các bước thiết lập FCM trên AWS giống với quy trình thiết lập GCM và (ít nhất là tại thời điểm hiện tại) FCM hoạt động minh bạch với GCM và SNS đối với cấu hình phía máy chủ.

Tuy nhiên , nếu bạn đang gửi datatrọng tải đến thiết bị Android, chúng sẽ không được xử lý trừ khi bạn triển khai dịch vụ phía máy khách mở rộng FirebaseMessagingService. Trình tạo thông báo JSON mặc định trong bảng điều khiển AWS sẽ gửi datathông báo, thông báo này sẽ bị ứng dụng của bạn bỏ qua trừ khi dịch vụ nói trên được triển khai. Để giải quyết vấn đề này cho thử nghiệm ban đầu, bạn có thể cung cấp notificationtải trọng tùy chỉnh mà thiết bị của bạn sẽ nhận được (miễn là ứng dụng của bạn không ở nền trước)

hướng dẫn di chuyển GCM-FCM cung cấp bởi Google tuy nhiên những thay đổi bạn cần phải thực hiện chủ yếu là ở phía bên App.

Các bước bạn cần làm theo để kiểm tra GCM / FCM trên ứng dụng của mình với SNS là:

  1. Tạo Ứng dụng nền tảng trong SNS , chọn Google Cloud Messaging (GCM) làm Nền tảng thông báo đẩy và cung cấp khóa API máy chủ của bạn trong trường khóa API .
  2. Chọn Ứng dụng nền tảng và nhấp vào nút Tạo điểm cuối nền tảng .
  3. Cung cấp InstanceID ( Mã thông báo thiết bị ) do ứng dụng của bạn tạo. Bạn phải mở rộng FirebaseInstanceIDServicevà ghi đè onTokenRefreshphương thức để xem điều này trong Ứng dụng Android của mình. Khi bạn đã thực hiện xong việc này , hãy gỡ cài đặt và cài đặt lại ứng dụng của bạn và mã thông báo của bạn sẽ được in vào Bảng điều khiển gỡ lỗi trong Android Studio trong lần khởi động đầu tiên.
  4. Nhấp vào nút Thêm điểm cuối .
  5. Nhấp vào liên kết ARN cho ứng dụng nền tảng của bạn.
  6. Chọn Điểm cuối mới được tạo cho thiết bị của bạn và nhấp vào nút Xuất bản lên điểm cuối .
  7. Chọn Định dạng thông báo JSON và nhấp vào nút tạo thông báo JSON .
  8. Nhập tin nhắn kiểm tra và nhấp vào JSON Tạo nút
  9. Bây giờ đến phần "gotcha".

Thông báo được tạo bởi SNS sẽ có dạng:

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

Như chúng tôi đã đề cập trước đó, datatải trọng sẽ bị bỏ qua nếu không có dịch vụ nhận chúng được triển khai. Chúng tôi muốn kiểm tra mà không viết quá nhiều mã, vì vậy thay vào đó chúng tôi nên gửi một notificationtải trọng. Để thực hiện việc này, chỉ cần thay đổi thông báo JSON để đọc:

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

Khi bạn đã thực hiện xong việc này, hãy đảm bảo rằng ứng dụng của bạn không chạy trên thiết bị và nhấn nút Xuất bản tin nhắn . Bây giờ bạn sẽ thấy một thông báo bật lên trên thiết bị của mình.

Tất nhiên, bạn có thể thực hiện tất cả những điều này theo chương trình thông qua Amazon SNS API, tuy nhiên, tất cả các ví dụ dường như đều sử dụng datatrọng tải, vì vậy bạn cần ghi nhớ điều đó và tạo tải trọng phù hợp với trường hợp sử dụng của mình.


2
Câu trả lời tuyệt vời, cảm ơn. Cần lưu ý rằng json có một số thông tin chuyên sâu liên quan đến các tùy chọn cấu hình - xem developer.google.com/cloud-messaging/concept-options - mặc dù tôi chưa thử nghiệm bất kỳ chức năng dành riêng cho FCM nào.
Tom,

datathông báo hoạt động tốt khi sử dụng sns ngay cả khi ứng dụng khách không triển khai FCM nhưng GCM. Trong ứng dụng của tôi, tôi chưa nâng cấp lên FCM ở phía máy khách nhưng FCM sử dụng SNS cũng hoạt động tốt cho datacác tin nhắn. Nó sẽ không hoạt động?
Sash_KP,

2
SNS sử dụng GCM, vì vậy nếu bạn đang sử dụng ứng dụng khách GCM, nó sẽ hoạt động như bình thường (cho đến khi Google quyết định gỡ bỏ GCM). Câu hỏi này liên quan nhiều hơn đến hỗ trợ FCM trên AWS (được hỗ trợ thông qua khả năng tương thích ngược ở phía Google API)
Nathan Dunn

có thể sử dụng chủ đề sns với fmc không? cảm ơn bạn đã có câu trả lời tuyệt vời như vậy
Juan Jose Tugores

Chào mừng bạn - có, bạn có thể đăng ký riêng các điểm cuối đẩy di động (tức là. GCM-> FCM) vào một chủ đề SNS như bình thường, tuy nhiên, điều này sẽ tạo ra một số lượng lớn thông báo trong AWS. Nếu bạn đang sử dụng bên FCM khách hàng lựa chọn khác là sử dụng chủ đề FCM hoặc Phân đoạn người dùng đó sẽ chỉ đi qua các máy chủ của Google
Nathan Dunn

14

Bây giờ bạn có thể truy cập bảng điều khiển firebase của mình ( https://console.firebase.google.com/ ) chọn dự án của bạn, nhấp vào biểu tượng bánh răng và chọn cài đặt dự án, sau đó nhấp vào tab nhắn tin đám mây ...

Bạn sẽ thấy Khóa máy chủ kế thừa là Khóa API GCM và bạn sẽ có tùy chọn để tạo Khóa máy chủ mới là phiên bản FCM

SNS sẽ chấp nhận cả hai phiên bản nhưng tùy chọn menu của họ vẫn đang phân loại nó trong GCM

Đây là hình ảnh để bạn tham khảo:

nhập mô tả hình ảnh ở đây

Lưu ý rằng bạn có thể "vô tình" xóa Khóa máy chủ của mình nhưng không thể xóa khóa máy chủ cũ. Ngoài ra, nếu bạn nhấp vào nút thêm khóa máy chủ, bạn sẽ nhận được một khóa máy chủ mới DƯỚI ĐÂY cái đầu tiên, KHÔNG CÓ CẢNH BÁO! ... Làm tốt lắm Google;)


5

Tôi đã cố gắng sử dụng giải pháp với tải trọng thông báo thay vì dữ liệu, nhưng tôi không nhận được thông báo đẩy trên thiết bị di động. Tôi đã tìm thấy hướng dẫn này https://youtu.be/iBTFLu30dSg với phụ đề tiếng Anh về cách sử dụng FCM với AWS SNS từng bước và ví dụ về cách gửi thông báo đẩy từ bảng điều khiển AWS và triển khai nó trên php với aws php sdk. Nó đã giúp tôi rất nhiều.


5

Thêm một lưu ý nữa cho câu trả lời tuyệt vời của Nathan Dunn. Cách gửi dữ liệu với thông báo từ SNS tới Firebase.

Chúng tôi cần thêm dữ liệu vào Json (bên trong thông báo):

{
    "default": any value", 
     "GCM": "{ \"notification\": { \"body\": \”message body\”, \”title\”: \”message title \”, \"sound\":\"default\" } , \"data\" : {\”key\" : \”value\", \”key2\" : \”value\” } }”
}

Trong triển khai FirebaseMessagingService của bạn (ví dụ về 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)
    {
    }
}

Mã thông báo FCM ở đâu?
JPM

làm cách nào để gửi URL hình ảnh trong tải trọng
tarek noaman

3

Chỉ là một ghi chú bổ sung cho Câu trả lời của Nathan Dunn: để thêm âm thanh, hãy sử dụng thông báo JSON sau

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

làm cách nào để gửi URL hình ảnh trong tải trọng
tarek noaman

0

Tôi đã mất một lúc để tìm ra cách gửi thông báo với tải trọng phù hợp (xuất bản lên chủ đề). Vì vậy, tôi sẽ đặt nó ở đây.

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

Để trả lời các câu hỏi:

  1. AWS SNS không hỗ trợ FCM.
  2. Không AWS không lưu trữ tin nhắn sau khi gửi thông báo đẩy.

Để có hướng dẫn chi tiết về cách thiết lập FCM với SNS, vui lòng đọc bài viết này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.