Membuat endpoint platform - Amazon Simple Notification Service

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Membuat endpoint platform

Saat aplikasi dan perangkat seluler terdaftar dengan layanan notifikasi push, layanan notifikasi push mengembalikan token perangkat. Amazon SNS menggunakan token perangkat untuk membuat endpoint seluler, yang dapat mengirim pesan notifikasi push langsung. Untuk informasi selengkapnya, lihat Prasyarat untuk notifikasi pengguna Amazon SNS dan Gambaran umum proses notifikasi pengguna.

Bagian ini menjelaskan pendekatan yang disarankan untuk membuat endpoint platform.

Membuat endpoint platform

Untuk mendorong notifikasi ke aplikasi dengan Amazon SNS, token perangkat aplikasi tersebut harus terlebih dahulu terdaftar ke Amazon SNS dengan memanggil tindakan buat endpoint platform. Tindakan ini mengambil Amazon Resource Name (ARN) dari aplikasi platform dan token perangkat sebagai parameter dan mengembalikan ARN dari endpoint platform yang dibuat.

CreatePlatformEndpointTindakan tersebut melakukan hal berikut:

  • Jika endpoint platform sudah ada, maka jangan buat lagi. Kembali ke pemanggil ARN dari endpoint platform yang ada.

  • Jika endpoint platform dengan token perangkat yang sama tetapi pengaturan yang berbeda sudah ada, maka jangan buat lagi. Lempar pengecualian ke pemanggil.

  • Jika endpoint platform tidak ada, buatlah. Kembali ke pemanggil ARN dari endpoint platform yang baru dibuat.

Anda tidak boleh langsung memanggil tindakan buat endpoint platform setiap kali aplikasi dimulai, karena pendekatan ini tidak selalu menyediakan endpoint yang berfungsi. Hal ini dapat terjadi, misalnya, saat aplikasi dihapus dan diinstal ulang pada perangkat yang sama dan endpoint untuk itu sudah ada tetapi dinonaktifkan. Proses pendaftaran yang berhasil harus memenuhi hal-hal berikut:

  1. Pastikan endpoint platform ada untuk kombinasi aplikasi-perangkat ini.

  2. Pastikan token perangkat di endpoint platform adalah token perangkat valid terbaru.

  3. Pastikan endpoint platform diaktifkan dan siap digunakan.

Kode semu

Kode semu berikut menjelaskan praktik yang disarankan untuk membuat endpoint platform yang berfungsi, saat ini, dan diaktifkan dalam berbagai kondisi awal. Pendekatan ini berfungsi baik ini pertama kali aplikasi terdaftar atau tidak, apakah endpoint platform untuk aplikasi ini sudah ada, dan apakah endpoint platform diaktifkan, memiliki token perangkat yang benar, dan seterusnya. Aman untuk memanggilnya beberapa kali berturut-turut, karena tidak akan membuat endpoint platform duplikat atau mengubah endpoint platform yang ada jika sudah diperbarui dan diaktifkan.

retrieve the latest device token from the mobile operating system if (the platform endpoint ARN is not stored) # this is a first-time registration call create platform endpoint store the returned platform endpoint ARN endif call get endpoint attributes on the platform endpoint ARN if (while getting the attributes a not-found exception is thrown) # the platform endpoint was deleted call create platform endpoint with the latest device token store the returned platform endpoint ARN else if (the device token in the endpoint does not match the latest one) or (get endpoint attributes shows the endpoint as disabled) call set endpoint attributes to set the latest device token and then enable the platform endpoint endif endif

Pendekatan ini dapat digunakan kapan saja aplikasi ingin mendaftar atau mendaftar ulang sendiri. Ini juga dapat digunakan saat memberi tahu Amazon SNS tentang perubahan token perangkat. Dalam hal ini, Anda cukup memanggil tindakan dengan nilai token perangkat terbaru. Beberapa hal yang perlu diperhatikan tentang pendekatan ini adalah:

  • Ada dua kasus di mana ia dapat memanggil tindakan buat endpoint platform. Ini dapat disebut di awal, di mana aplikasi tidak mengetahui ARN endpoint platformnya sendiri, seperti yang terjadi selama pendaftaran pertama kali. Ini juga dipanggil jika panggilan tindakan awal mendapatkan atribut endpoint gagal dengan pengecualian yang tidak ditemukan, seperti yang akan terjadi jika aplikasi mengetahui ARN endpoint-nya tetapi telah dihapus.

  • Tindakan mendapatkan atribut endpoint dipanggil untuk memverifikasi status endpoint platform meskipun endpoint platform baru saja dibuat. Ini terjadi ketika endpoint platform sudah ada tetapi dinonaktifkan. Dalam hal ini, tindakan buat endpoint platform berhasil tetapi tidak mengaktifkan endpoint platform, jadi Anda harus memeriksa ulang status endpoint platform sebelum mengembalikan kesuksesan.

AWS Contoh SDK

Kode berikut menunjukkan cara menerapkan kode semu sebelumnya menggunakan klien Amazon SNS yang disediakan oleh AWS SDK.

Untuk menggunakan AWS SDK, Anda harus mengonfigurasinya dengan kredensi Anda. Untuk informasi selengkapnya, lihat File konfigurasi dan kredensial bersama di Panduan Referensi AWS SDK dan Alat.

CLI
AWS CLI

Untuk membuat endpoint aplikasi platform

create-platform-endpointContoh berikut membuat titik akhir untuk aplikasi platform tertentu menggunakan token yang ditentukan.

aws sns create-platform-endpoint \ --platform-application-arn arn:aws:sns:us-west-2:123456789012:app/GCM/MyApplication \ --token EXAMPLE12345...

Output:

{ "EndpointArn": "arn:aws:sns:us-west-2:1234567890:endpoint/GCM/MyApplication/12345678-abcd-9012-efgh-345678901234" }
Java
SDK for Java 2.x
catatan

Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di Repositori Contoh Kode AWS.

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sns.SnsClient; import software.amazon.awssdk.services.sns.model.CreatePlatformEndpointRequest; import software.amazon.awssdk.services.sns.model.CreatePlatformEndpointResponse; import software.amazon.awssdk.services.sns.model.SnsException; /** * Before running this Java V2 code example, set up your development * environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html * * In addition, create a platform application using the AWS Management Console. * See this doc topic: * * https://docs.aws.amazon.com/sns/latest/dg/mobile-push-send-register.html * * Without the values created by following the previous link, this code examples * does not work. */ public class RegistrationExample { public static void main(String[] args) { final String usage = """ Usage: <token> <platformApplicationArn> Where: token - The name of the FIFO topic.\s platformApplicationArn - The ARN value of platform application. You can get this value from the AWS Management Console.\s """; if (args.length != 2) { System.out.println(usage); System.exit(1); } String token = args[0]; String platformApplicationArn = args[1]; SnsClient snsClient = SnsClient.builder() .region(Region.US_EAST_1) .build(); createEndpoint(snsClient, token, platformApplicationArn); } public static void createEndpoint(SnsClient snsClient, String token, String platformApplicationArn) { System.out.println("Creating platform endpoint with token " + token); try { CreatePlatformEndpointRequest endpointRequest = CreatePlatformEndpointRequest.builder() .token(token) .platformApplicationArn(platformApplicationArn) .build(); CreatePlatformEndpointResponse response = snsClient.createPlatformEndpoint(endpointRequest); System.out.println("The ARN of the endpoint is " + response.endpointArn()); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } } }

Untuk informasi selengkapnya, lihat Tindakan API push seluler.

Pemecahan Masalah

Panggilan berulang kali membuat endpoint platform dengan token perangkat yang sudah usang

Khusus untuk titik akhir FCM, Anda mungkin berpikir yang terbaik adalah menyimpan token perangkat pertama yang dikeluarkan aplikasi dan kemudian memanggil titik akhir platform buat dengan token perangkat itu setiap kali saat aplikasi start-up. Ini mungkin tampak benar karena membebaskan aplikasi dari keharusan mengelola status token perangkat dan Amazon SNS akan secara otomatis memperbarui token perangkat ke nilai terbarunya. Namun, solusi ini memiliki sejumlah masalah serius:

  • Amazon SNS mengandalkan umpan balik dari FCM untuk memperbarui token perangkat yang kedaluwarsa ke token perangkat baru. FCM menyimpan informasi tentang token perangkat lama untuk beberapa waktu, tetapi tidak selamanya. Setelah FCM melupakan koneksi antara token perangkat lama dan token perangkat baru, Amazon SNS tidak akan lagi dapat memperbarui token perangkat yang disimpan di endpoint platform ke nilai yang benar; itu hanya akan menonaktifkan endpoint platform saja.

  • Aplikasi platform akan berisi beberapa endpoint platform yang sesuai dengan token perangkat yang sama.

  • Amazon SNS memberlakukan kuota pada jumlah endpoint platform yang dapat dibuat mulai dengan token perangkat yang sama. Pada akhirnya, pembuatan endpoint baru akan gagal dengan pengecualian parameter yang tidak valid dan pesan kesalahan berikut: "Endpoint ini sudah terdaftar dengan token yang berbeda."

Untuk informasi selengkapnya tentang mengelola titik akhir FCM, lihat. Manajemen titik akhir Firebase Cloud Messaging (FCM)

Mengaktifkan kembali endpoint platform yang terkait dengan token perangkat yang tidak valid

Saat platform seluler (seperti APN atau FCM) memberi tahu Amazon SNS bahwa token perangkat yang digunakan dalam permintaan publikasi tidak valid, Amazon SNS menonaktifkan endpoint platform yang terkait dengan token perangkat tersebut. Amazon SNS kemudian akan menolak publikasi berikutnya untuk token perangkat tersebut. Meskipun Anda mungkin berpikir bahwa yang terbaik adalah mengaktifkan kembali endpoint platform dan terus memublikasikan, dalam sebagian besar situasi, hal ini tidak akan berhasil: pesan yang diterbitkan tidak terkirim dan endpoint platform menjadi dinonaktifkan lagi segera setelahnya.

Ini karena token perangkat yang terkait dengan endpoint platform benar-benar tidak valid. Pengiriman tidak dapat berhasil karena tidak lagi sesuai dengan aplikasi yang diinstal. Saat berikutnya dipublikasikan, platform seluler akan kembali menginformasikan Amazon SNS bahwa token perangkat tidak valid, dan Amazon SNS akan menonaktifkan lagi endpoint platform.

Untuk mengaktifkan kembali endpoint platform yang dinonaktifkan, endpoint tersebut harus dikaitkan dengan token perangkat yang valid (dengan panggilan tindakan atribut endpoint yang ditetapkan) lalu diaktifkan. Hanya dengan demikian pengiriman ke endpoint platform tersebut akan berhasil. Satu-satunya waktu mengaktifkan kembali endpoint platform tanpa memperbarui token perangkatnya akan berfungsi adalah ketika token perangkat yang terkait dengan endpoint itu dulu tidak valid tetapi kemudian menjadi valid lagi. Hal ini dapat terjadi, misalnya, saat aplikasi dihapus penginstalannya lalu diinstal kembali di perangkat seluler yang sama dan menerima token perangkat yang sama. Pendekatan yang disajikan di atas melakukan ini, memastikan untuk hanya mengaktifkan kembali endpoint platform setelah memverifikasi bahwa token perangkat yang terkait dengannya adalah yang terbaru yang tersedia.