AWS SNS ile FCM


94

AWSAndroid projem için kaynakları kullanıyorum , projem için push bildirim hizmeti eklemeyi planlıyorum AWS SNS. Beni çok rahatsız eden birkaç soru var. Bunlarla ilgili bir veya iki dışında, ancak açıklamaları net olmayan bir soru bulamadım.

1. AWSdestekliyor FCMmu? SNSile çalışmak GCM. Ancak Google, bunun yerine FCM kullanmanızı önerir GCM. AWSDestek bulamadım FCM.

2. AWSPush bildirimleri gönderdikten sonra bile mesajları (veya verileri) veritabanlarında depoluyor musunuz?

3. FCM api anahtarını SNS uygulama platformuna koymayı denedim, neden geçersiz parametreler gösteriyor?


SNS henüz FCM'yi desteklemiyor, GCM'nin kullanımdan kaldırılmış bir sürümünü kullanıyor. API anahtarını nereden alıyorsunuz?
Arthur Thompson

1
Denediğim şey, FCM'nin api anahtarını SNS'ye koymaya çalıştım ve işe yaramadı, AWS'deki (SNS) dokümanı okuduktan sonra sunucu anahtarını koymaktan bahsettiler. İyi çalıştı denedim. FCM için SNS aracılığıyla push bildirimleri gönderebiliyorum. Tam olarak neden işe yaradığını bilmiyorum. SNS'nin şu anda FCM'yi desteklemediğinden emin misiniz?
Naroju

GCM (artık FCM) mesajlarını göndermek için sunucu anahtarının gerekli olduğu doğrudur. İstemci tarafında (mobil cihaz) GCM ve FCM genellikle aynıdır, bu nedenle her ikisi de mesajları beklenen bir şekilde alır. Ancak, çalışmayan bazı FCM özellikleri vardır, örneğin: konu mesajlaşma.
Arthur Thompson

fmc ile sns konularını kullanmak mümkün mü? harika bir cevap için teşekkür ederim
Juan Jose Tugores

ilk etapta SNS kullanmanın faydası nedir? FCM yeterli olmamalı mı?
Halid Osman

Yanıtlar:


192

FCM, GCM ile geriye doğru uyumludur. AWS'de FCM'yi kurma adımları, GCM kurulum prosedürü ile aynıdır ve (en azından şu an için) FCM, sunucu tarafı yapılandırmasına göre GCM ve SNS ile şeffaf bir şekilde çalışır.

Ancak Gönderdiğiniz eğer, dataAndroid cihaza yükleri bir uygulamaya sürece işleme alınmayacaktır istemci tarafı hizmeti uzanır FirebaseMessagingService. AWS konsolundaki varsayılan JSON mesaj oluşturucusu data, yukarıda belirtilen hizmet uygulanmadığı sürece uygulamanız tarafından yok sayılacak mesajlar gönderir . İlk test için bunu notificationaşmak için, cihazınız tarafından alınacak özel bir yük sağlayabilirsiniz (uygulamanız ön planda olmadığı sürece)

Orada GCM-FCM taşıma talimatları Google tarafından sağlanan ancak marka gereken değişiklikler App tarafında ağırlıklı olarak bulunmaktadır.

Uygulamanızda SNS ile GCM / FCM'yi test etmek için izlemeniz gereken adımlar şunlardır:

  1. SNS'de bir Platform Uygulaması oluşturun , Push Bildirim Platformu olarak Google Cloud Messaging'i (GCM) seçin ve API anahtarı alanında Sunucu API anahtarınızı sağlayın .
  2. Platform Uygulamasını seçin ve Platform uç noktası oluştur düğmesine tıklayın.
  3. Uygulamanız tarafından oluşturulan Örnek Kimliğini ( Cihaz Jetonu ) sağlayın . Bunu Android Uygulamanızda görmek FirebaseInstanceIDServiceiçin genişletmeli ve onTokenRefreshyöntemi geçersiz kılmalısınız. Eğer bir kez yapmış , kaldırma ve uygulamanızı yeniden ve belirteç ilk açılışta Android Studio hata ayıklama konsoluna basılmalıdır.
  4. Click Ekle uç nokta düğmesini.
  5. Platform uygulamanız için ARN bağlantısına tıklayın.
  6. Cihazınız için yeni oluşturulan Uç Noktayı seçin ve Uç noktaya yayınla düğmesini tıklayın.
  7. JSON Mesaj Formatını seçin ve JSON mesaj oluşturucu düğmesine tıklayın.
  8. Bir test mesajı girin ve JSON Oluştur düğmesini tıklayın
  9. Şimdi "yakalama kısmı" geliyor.

SNS tarafından oluşturulan mesaj şu biçimde olacaktır:

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

Daha önce de belirttiğimiz gibi, databunları alacak bir hizmet uygulanmadıysa yükler göz ardı edilecektir. Çok fazla kod yazmadan test etmek istiyoruz, bu yüzden bunun yerine bir notificationyük göndermeliyiz . Bunu yapmak için, JSON mesajını okuyacak şekilde değiştirmeniz yeterlidir:

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

Bunu yaptıktan sonra, uygulamanızın cihazda çalışmadığından emin olun ve Mesajı Yayınla düğmesine basın. Şimdi cihazınızda bir bildirim açılır görmelisiniz.

Elbette tüm bunları Amazon SNS API aracılığıyla programlı olarak yapabilirsiniz, ancak tüm örnekler datayükü kullanıyor gibi görünmektedir, bu nedenle bunu aklınızda bulundurmanız ve kullanım durumunuza uygun bir yük oluşturmanız gerekir.


2
Harika cevap, teşekkürler. FCM'ye özgü herhangi bir işlevi test etmemiş olsam da , json'un yapılandırma seçenekleri konusunda biraz derinliğe sahip olduğunu belirtmek gerekir - bkz. Developer.google.com/cloud-messaging/concept-options .
Tom

dataistemci uygulaması FCM'yi değil GCM'yi uygulamasa bile mesajlar sns kullanıldığında sorunsuz çalışıyor. Uygulamamda istemci tarafında FCM'ye yükseltmedim ancak SNS kullanan FCM datamesajlar için de iyi çalışıyor . Çalışması gerekmez mi?
Sash_KP

2
SNS, GCM'yi kullanır, bu nedenle GCM istemcisini kullanıyorsanız normal şekilde davranması gerekir (Google'ın GCM'yi kullanımdan kaldırmaya karar verdiği noktaya kadar). Bu soru daha çok AWS'de FCM desteğiyle ilgilidir (Google API tarafında geriye dönük uyumluluk ile desteklenir)
Nathan Dunn

fmc ile sns konularını kullanmak mümkün mü? harika bir cevap için teşekkür ederim
Juan Jose Tugores

Hoş geldiniz - evet, mobil push (yani, GCM-> FCM) uç noktalarına normal olarak bir SNS konusuna bireysel olarak abone olabilirsiniz, ancak bu AWS içinde çok sayıda mesaj oluşturacaktır. FCM istemci tarafını kullanıyorsanız, başka bir alternatif de, yalnızca Google'ın sunucularında dolaşacak olan FCM Konularını veya Kullanıcı Segmentlerini kullanmaktır
Nathan Dunn

14

Artık firebase konsolunuza gidebilir ( https://console.firebase.google.com/ ) projenizi seçebilir, dişli simgesini tıklayıp proje ayarlarını seçebilir ve ardından bulut mesajlaşma sekmesine tıklayabilirsiniz ...

GCM API Anahtarı olan eski Sunucu Anahtarını göreceksiniz ve FCM sürümleri olan yeni Sunucu Anahtarları oluşturma seçeneğiniz olacak

SNS, her iki sürümü de kabul edecek, ancak menü seçenekleri yine de GCM altında kategorize ediyor

İşte referans için resim:

görüntü açıklamasını buraya girin

Sunucu Anahtarlarınızı "yanlışlıkla" kaldırabileceğinizi, ancak Eski sunucu anahtarının silinemez olduğunu unutmayın. Ayrıca, sunucu anahtarı ekle düğmesini tıklarsanız, UYARI OLMAKSIZIN ilkinden AŞAĞIDA yeni bir sunucu anahtarı alırsınız! ... Tebrikler Google;)


6

Nathan Dunn'ın harika cevabına bir not daha. SNS'den Firebase'e bildirimle veri nasıl gönderilir.

Json'a veri eklememiz gerekiyor (bildirimin içinde):

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

FirebaseMessagingService uygulamanızda (Xamarin örneği)

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 belirteci nerede?
JPM


5

Çözümü veri yerine bildirim yükü ile kullanmayı denedim ancak mobil cihazda anlık bildirim almadım. Bu öğreticiyi https://youtu.be/iBTFLu30dSg buldum ve FCM'nin AWS SNS ile adım adım nasıl kullanılacağına dair İngilizce altyazılı ve AWS konsolundan push bildirimlerinin nasıl gönderileceğine ve aws php sdk ile php'de nasıl uygulanacağına dair bir örnek buldum . Bana çok yardımcı oldu.


3

Nathan Dunn'ın Cevabına ek bir not: ses eklemek için aşağıdaki JSON mesajını kullanın

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


0

Bildirimi doğru yük ile nasıl göndereceğimi bulmam biraz zaman aldı (konuya yayınla). O yüzden buraya koyacağım.

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


-1

Soruları cevaplamak için:

  1. AWS SNS, FCM'yi destekler.
  2. Hiçbir AWS, push bildirimleri gönderdikten sonra mesajları saklamaz.

FCM'yi SNS ile kurma hakkında ayrıntılı bir eğitim için lütfen bu makaleyi okuyun .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.