FCM dengan AWS SNS

94

Saya menggunakan AWSsumber daya untuk proyek android saya, saya berencana untuk menambahkan layanan pemberitahuan push untuk proyek saya dengan AWS SNS. Ada beberapa pertanyaan yang sangat mengganggu saya. Saya tidak menemukan pertanyaan apapun mengenai ini, kecuali satu atau dua tetapi dengan penjelasan yang tidak jelas.

1. Apakah AWSmendukung FCM? SNSbekerja dengan GCM. Namun Google merekomendasikan untuk menggunakan FCM, bukan GCM. Saya tidak menemukan AWSpendukung FCM.

2. Apakah AWSmenyimpan pesan (atau data) ke dalam database mereka bahkan setelah mengirimkan pemberitahuan push?

3. Saya mencoba menempatkan kunci api FCM di platform aplikasi SNS, itu menunjukkan parameter yang tidak valid mengapa?

Naroju
sumber
SNS belum mendukung FCM, SNS menggunakan versi GCM yang tidak digunakan lagi. Dari mana Anda mendapatkan kunci API?
Arthur Thompson
1
Apa yang saya coba adalah, saya mencoba meletakkan kunci api FCM di SNS dan tidak berhasil, Setelah membaca dokumen di AWS (SNS) mereka menyebutkan untuk meletakkan kunci server. Saya mencoba itu bekerja dengan baik. Saya dapat mengirim notifikasi push melalui SNS untuk FCM. Tidak tahu persis alasan mengapa itu berhasil. Apakah Anda yakin bahwa SNS tidak mendukung FCM saat ini?
Naroju
Benar bahwa kunci server diperlukan untuk mengirim pesan GCM (sekarang FCM). Di sisi klien (perangkat seluler), GCM dan FCM secara umum sama sehingga keduanya akan menerima pesan dengan cara yang diharapkan. Namun, ada beberapa fitur FCM yang tidak berfungsi, misalnya: perpesanan topik.
Arthur Thompson
apakah mungkin menggunakan topik sns dengan fmc? terima kasih atas jawaban yang luar biasa
Juan Jose Tugores
apa manfaat menggunakan SNS? bukankah FCM cukup?
Khaled Osman

Jawaban:

188

FCM kompatibel dengan GCM. Langkah-langkah untuk menyiapkan FCM di AWS identik dengan prosedur penyiapan GCM dan (setidaknya untuk saat ini) FCM bekerja secara transparan dengan GCM dan SNS sehubungan dengan konfigurasi sisi server.

Namun , jika Anda mengirim datapayload ke perangkat Android, payload tidak akan diproses kecuali Anda menerapkan layanan sisi klien yang diperluas FirebaseMessagingService. Generator pesan JSON default di konsol AWS mengirim datapesan, yang akan diabaikan oleh aplikasi Anda kecuali layanan yang disebutkan di atas diterapkan. Untuk menyiasati hal ini untuk pengujian awal, Anda dapat memberikan notificationpayload khusus yang akan diterima oleh perangkat Anda (selama aplikasi Anda tidak berada di latar depan)

Ada petunjuk migrasi GCM-FCM yang disediakan oleh Google, namun perubahan yang perlu Anda lakukan sebagian besar ada di sisi Aplikasi.

Langkah-langkah yang perlu Anda ikuti untuk menguji GCM / FCM di aplikasi Anda dengan SNS adalah:

  1. Buat Aplikasi Platform di SNS , pilih Google Cloud Messaging (GCM) sebagai Push Notification Platform , dan berikan kunci API Server Anda di kolom kunci API .
  2. Pilih Aplikasi Platform dan klik tombol Buat titik akhir platform .
  3. Berikan InstanceID ( Token Perangkat ) yang dibuat oleh aplikasi Anda. Anda harus memperluas FirebaseInstanceIDServicedan mengganti onTokenRefreshmetode untuk melihatnya dalam Aplikasi Android Anda. Setelah Anda selesai melakukannya , uninstal dan instal ulang aplikasi Anda dan token Anda akan dicetak ke konsol Debug di Android Studio pada boot pertama.
  4. Klik tombol Tambahkan titik akhir .
  5. Klik tautan ARN untuk aplikasi platform Anda.
  6. Pilih Endpoint yang baru dibuat untuk perangkat Anda dan klik tombol Publikasikan ke endpoint .
  7. Pilih Format Pesan JSON , dan klik tombol pembuat pesan JSON .
  8. Masukkan pesan tes dan klik Generate JSON tombol
  9. Sekarang sampai pada "bagian gotcha".

Pesan yang dihasilkan oleh SNS akan berupa:

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

Seperti yang kami sebutkan sebelumnya, datapayload akan diabaikan jika tidak ada layanan untuk menerimanya yang telah diterapkan. Kami ingin menguji tanpa menulis terlalu banyak kode, jadi kami harus mengirimkan notificationpayload. Untuk melakukan ini, cukup ubah pesan JSON menjadi:

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

Setelah Anda melakukan ini, pastikan aplikasi Anda tidak berjalan di perangkat, dan tekan tombol Publikasikan Pesan . Anda sekarang harus melihat pemberitahuan muncul di perangkat Anda.

Anda tentu saja dapat melakukan semua ini secara terprogram melalui Amazon SNS API, namun semua contoh tampaknya menggunakan datamuatan sehingga Anda perlu mengingatnya dan menghasilkan muatan yang sesuai dengan kasus penggunaan Anda.

Nathan Dunn
sumber
2
Jawaban yang brilian, terima kasih. Perlu diperhatikan bahwa json memiliki beberapa kedalaman dalam hal opsi konfigurasi - lihat developers.google.com/cloud-messaging/concept-options - meskipun saya belum menguji fungsionalitas khusus FCM.
Tom
datapesan berfungsi dengan baik menggunakan sns meskipun aplikasi klien tidak mengimplementasikan FCM, tetapi GCM. Di aplikasi saya, saya belum mengupgrade ke FCM di sisi klien tetapi FCM yang menggunakan SNS juga berfungsi dengan baik untuk datapesan. Bukankah seharusnya itu berhasil?
Sash_KP
2
SNS menggunakan GCM, jadi jika Anda menggunakan klien GCM, SNS akan berperilaku seperti biasa (hingga Google memutuskan untuk menghentikan GCM). Pertanyaan ini lebih berkaitan dengan dukungan FCM di AWS (yang didukung melalui kompatibilitas mundur di sisi Google API)
Nathan Dunn
apakah mungkin menggunakan topik sns dengan fmc? terima kasih atas jawaban yang luar biasa
Juan Jose Tugores
Selamat datang - ya, Anda dapat berlangganan endpoint seluler satu per satu (mis. GCM-> FCM) ke topik SNS seperti biasa, namun ini akan menghasilkan banyak pesan dalam AWS. Jika Anda menggunakan sisi klien FCM, alternatif lain adalah menggunakan Topik FCM atau Segmen Pengguna yang hanya akan berjalan melalui server Google
Nathan Dunn
14

Sekarang Anda dapat membuka konsol firebase ( https://console.firebase.google.com/ ) memilih proyek Anda, klik ikon roda gigi dan pilih setelan proyek, lalu klik pada tab perpesanan awan ...

Anda akan melihat Kunci Server lama yang merupakan Kunci API GCM dan Anda akan memiliki opsi untuk membuat Kunci Server baru yang merupakan versi FCM

SNS akan menerima kedua versi tetapi opsi menu mereka masih mengkategorikannya di bawah GCM

Ini gambar untuk referensi Anda:

masukkan deskripsi gambar di sini

Perhatikan bahwa Anda dapat "secara tidak sengaja" menghapus Kunci Server Anda, tetapi kunci server Lawas tidak dapat dihapus. Juga, jika Anda mengklik tombol tambahkan kunci server, Anda akan mendapatkan kunci server baru DI BAWAH yang pertama, TANPA PERINGATAN! ... Kerja bagus Google;)

Reza
sumber
5

Saya mencoba menggunakan solusi dengan payload pemberitahuan alih-alih data, tetapi saya tidak menerima pemberitahuan push di perangkat seluler. Saya menemukan tutorial ini https://youtu.be/iBTFLu30dSg dengan subtitle bahasa Inggris tentang cara menggunakan FCM dengan AWS SNS langkah demi langkah dan contoh cara mengirim pemberitahuan push dari konsol AWS dan menerapkannya di php dengan aws php sdk. Itu sangat membantu saya.

Arbron
sumber
5

Satu lagi catatan tambahan untuk jawaban bagus Nathan Dunn. Cara mengirim data dengan notifikasi dari SNS ke Firebase.

Kita perlu menambahkan data ke Json (di dalam notifikasi):

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

Dalam implementasi FirebaseMessagingService Anda (contoh 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)
    {
    }
}
Adys
sumber
Di mana token FCM?
JPM
bagaimana saya bisa mengirim URL gambar di payload
tarek noaman
3

Hanya catatan tambahan untuk Jawaban Nathan Dunn: untuk menambahkan suara gunakan pesan JSON berikut

{
"GCM": "{ \"notification\": { \"text\": \"test message\",\"sound\":\"default\" } }"
}
Shao Yuan Chew Chia
sumber
bagaimana saya bisa mengirim URL gambar di payload
tarek noaman
0

Butuh beberapa saat bagi saya untuk memikirkan cara mengirim notifikasi dengan muatan yang tepat (publikasikan ke topik). Jadi saya akan taruh di sini.

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);
}    
Alexey
sumber
0

Amazon memang mendukung FCM karena semua kode sebelumnya telah dimigrasi dari GCM ke FCM. Artikel di bawah ini menjelaskan secara rinci.

Artikel Diterbitkan oleh Amazon

Ahli Epistemologi
sumber
Ini harus dibaca karena Amazon tidak mendukung GCM
Siva Karthikeyan
0

Untuk menjawab pertanyaan:

  1. AWS SNS mendukung FCM.
  2. Tidak ada AWS yang tidak menyimpan pesan setelah mengirimkan pemberitahuan push.

Untuk tutorial mendetail tentang menyiapkan FCM dengan SNS, harap baca artikel ini.

NS Mehra
sumber