Pusher menyalurkan plugin klien untuk menargetkan Android dan iOS. Ini membungkus Pusher-Websocket-Java V2.2.5 dan Pusher-Websocket-Swift V8.0.0.
Untuk tutorial dan lebih banyak informasi mendalam tentang saluran pendorong, kunjungi dokumen resmi.
Klien ini bekerja dengan server pendorong resmi dan server Pusher Websocket yang diselenggarakan sendiri Laravel (Laravel-Websockets).
Tambahkan ke pubspec.yaml Anda
dependencies :
pusher_client : ^2.0.0 Atur target penempatan minimum di podfile ke 9.0. Pergi ke ios/Podfile , lalu buka komentar baris ini:
# platform :ios, '8.0'
Ubah menjadi:
platform :ios, '9.0'
Anda mungkin memiliki masalah yang berlangganan saluran pribadi jika Anda menggunakan server pendorong lokal seperti Laravel-Websockets, untuk memperbaiki ini pergi ke ios/Runner/Info.plist dan tambahkan:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSAllowsArbitraryLoads</ key >
< true />
</ dict >Jika Anda tahu domain mana yang akan Anda sambungkan untuk ditambahkan:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSExceptionDomains</ key >
< dict >
< key >example.com</ key >
< dict >
< key >NSExceptionAllowsInsecureHTTPLoads</ key >
< true />
< key >NSIncludesSubdomains</ key >
< true />
</ dict >
</ dict >
</ dict > Jika Anda telah mengaktifkan kebingungan kode dengan R8 atau Proguard, Anda perlu menambahkan aturan berikut di android/app/build.gradle :
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile( ' proguard-android.txt ' ), ' proguard-rules.pro '
}
} Kemudian di android/app/proguard-rules.pro :
- keep class com.github.chinloyal.pusher_client .** { * ; } Singkatnya, API.
PusherOptions options = PusherOptions (
host : 'example.com' ,
wsPort : 6001 ,
encrypted : false ,
auth : PusherAuth (
'http://example.com/auth' ,
headers : {
'Authorization' : 'Bearer $ token ' ,
},
),
);
PusherClient pusher = PusherClient (
YOUR_APP_KEY ,
options,
autoConnect : false
);
// connect at a later time than at instantiation.
pusher. connect ();
pusher. onConnectionStateChange ((state) {
print ( "previousState: ${ state . previousState }, currentState: ${ state . currentState }" );
});
pusher. onConnectionError ((error) {
print ( "error: ${ error . message }" );
});
// Subscribe to a private channel
Channel channel = pusher. subscribe ( "private-orders" );
// Bind to listen for events called "order-status-updated" sent to "private-orders" channel
channel. bind ( "order-status-updated" , ( PusherEvent event) {
print (event.data);
});
// Unsubscribe from channel
pusher. unsubscribe ( "private-orders" );
// Disconnect from pusher service
pusher. disconnect ();
Informasi lebih lanjut dalam format referensi dapat ditemukan di bawah.
Konstruktor mengambil kunci aplikasi yang bisa Anda dapatkan dari bagian akses API aplikasi di dasbor saluran pendorong, dan objek opsi pendorong.
PusherClient pusher = PusherClient ( YOUR_APP_KEY , PusherOptions ()); Jika Anda akan menggunakan saluran pribadi, kehadiran, atau terenkripsi maka Anda harus menyediakan PusherAuth untuk digunakan saat mengautentikasi langganan. Untuk melakukan ini, Anda harus lulus di objek PusherOptions yang memiliki set auth .
PusherAuth auth = PusherAuth (
// for auth endpoint use full url
'http://example.com/auth' ,
headers : {
'Authorization' : 'Bearer $ token ' ,
},
);
PusherOptions options = PusherOptions (
auth : auth
);
PusherClient pusher = PusherClient ( YOUR_APP_KEY , options);Untuk menonaktifkan logging dan connect otomatis lakukan ini:
PusherClient pusher = PusherClient (
YOUR_APP_KEY ,
options,
enableLogging : false ,
autoConnect : false ,
); Jika Auto Connect dinonaktifkan maka Anda dapat terhubung secara manual menggunakan connect() pada instance Pusher.
Sebagian besar fungsi plugin ini dikonfigurasi melalui objek Pusheroptions. Anda mengonfigurasinya dengan mengatur parameter pada objek sebelum meneruskannya ke klien pendorong. Di bawah ini adalah tabel yang berisi semua properti yang dapat Anda atur.
| Metode | Parameter | Keterangan |
|---|---|---|
| terenkripsi | bool | Apakah koneksi harus dibuat dengan TLS atau tidak. |
| auth | Pusherauth | Menetapkan opsi otorisasi untuk digunakan saat mengautentikasi saluran pribadi, terenkripsi pribadi dan keberadaan. |
| tuan rumah | Rangkaian | Host ke koneksi mana yang akan dibuat. |
| wsport | int | Port tempat koneksi yang tidak terenkripsi akan dibuat. Secara otomatis diatur dengan benar. |
| WSSPORT | int | Port yang akan dibuat koneksi terenkripsi. Secara otomatis diatur dengan benar. |
| gugus | Rangkaian | Mengatur cluster yang akan terhubung ke klien, sehingga mengatur host dan port dengan benar. |
| ActivityTimeout | int | Jumlah milidetik tidak aktif di mana "ping" akan dipicu untuk memeriksa koneksi. Nilai standarnya adalah 120.000. |
| Pongtimeout | int | Jumlah milidetik klien menunggu untuk menerima respons "pong" dari server sebelum memutuskan sambungan. Nilai default adalah 30.000. |
| MaxReconnectionAttempts | int | Jumlah upaya penyambungan kembali yang akan dilakukan ketika pusher.connect() dipanggil, setelah itu klien akan menyerah. |
| MaxReconnectGapInconds | int | Penundaan dalam dua koneksi kembali meluas secara eksponensial (1, 2, 4, .. detik) Properti ini menetapkan maksimum di antara dua upaya penyambungan kembali. |
Metode connect() juga digunakan untuk menghubungkan kembali jika koneksi telah hilang, misalnya jika perangkat kehilangan penerimaan. Perhatikan bahwa status langganan saluran dan binding acara akan dipertahankan saat terputus dan dinegosiasikan kembali dengan server setelah koneksi dibangun kembali.
pusher. disconnect (); Setelah pemutusan, instance PusherClient akan merilis sumber daya yang dialokasikan secara internal (utas dan koneksi jaringan)
Saluran menggunakan konsep saluran sebagai cara berlangganan data. Mereka diidentifikasi dan berlangganan dengan nama sederhana. Acara terikat ke saluran dan juga diidentifikasi dengan nama.
Seperti disebutkan di atas, langganan saluran hanya perlu didaftarkan sekali oleh instance PusherClient . Mereka diawetkan di seluruh pemutusan dan didirikan kembali dengan server saat menghubungkan kembali. Mereka tidak boleh didaftarkan ulang. Namun, mereka mungkin terdaftar dengan instance PusherClient sebelum panggilan pertama untuk connect - mereka akan diselesaikan dengan server segera setelah koneksi tersedia.
Metode default untuk berlangganan saluran melibatkan memohon metode berlangganan objek klien Anda:
Channel channel = pusher. subscribe ( "my-channel" ); Ini mengembalikan objek Channel , peristiwa mana yang dapat terikat.
Saluran pribadi dibuat dengan cara yang persis sama dengan saluran publik, kecuali bahwa mereka tinggal di namespace 'pribadi-' . Ini berarti awalan nama saluran:
Channel privateChannel = pusher. subscribe ( "private-status-update" );Berlangganan saluran pribadi melibatkan klien yang diautentikasi. Lihat bagian Pusher Constructor untuk contoh saluran yang diautentikasi untuk informasi lebih lanjut.
Mirip dengan saluran pribadi, Anda juga dapat berlangganan saluran terenkripsi pribadi. Plugin ini sepenuhnya mendukung enkripsi ujung ke ujung. Ini berarti bahwa hanya Anda dan klien Anda yang terhubung yang dapat membaca pesan Anda. Pusher tidak bisa mendekripsi mereka. Saluran ini harus diawali dengan 'private-enkripsi-'
Seperti saluran pribadi, Anda harus memberikan titik akhir otentikasi. Titik akhir itu harus menggunakan klien server yang mendukung enkripsi ujung ke ujung. Ada titik akhir demonstrasi untuk dilihat menggunakan nodeJs.
Saluran keberadaan adalah saluran yang namanya diawali dengan 'kehadiran' . Saluran keberadaan juga perlu diautentikasi.
Channel presenceChannel = pusher. subscribe ( "presence-another-channel" );Ada dua jenis acara yang terjadi pada langganan saluran.
Channel channel = pusher. subscribe ( "private-orders" );
channel. bind ( "order-status-updated" , ( PusherEvent event) {
print (event.data);
}); Callback yang Anda ikat menerima PusherEvent :
| Milik | Jenis | Keterangan |
|---|---|---|
eventName | String | Nama acara. |
channelName | String | Nama saluran tempat acara dipicu. (Opsional) |
data | String | Data yang diteruskan ke trigger , dikodekan sebagai string. Jika Anda melewati suatu objek maka itu akan diserialisasi ke string JSON yang dapat Anda pure seperlunya. (Opsional) |
userId | String | ID pengguna yang memicu acara tersebut. Ini hanya tersedia untuk acara klien yang dipicu pada saluran keberadaan. (Opsional) |
Anda dapat melepaskan diri dari suatu acara dengan melakukan:
channel. unbind ( "order-status-updated" );Setelah langganan pribadi atau kehadiran diizinkan dan langganan telah berhasil, dimungkinkan untuk memicu peristiwa di saluran tersebut.
Acara yang dipicu oleh klien disebut acara klien. Karena mereka dipicu dari klien yang mungkin tidak dipercaya ada sejumlah aturan yang dipaksakan saat menggunakannya. Beberapa aturan ini meliputi:
channel. bind ( "pusher:subscription_succeeded" , ( PusherEvent event) {
channel. trigger ( "client-istyping" , { "name" : "Bob" });
});Untuk detail lengkap, lihat dokumentasi acara klien.
Setelah terhubung, Anda dapat mengakses pengidentifikasi unik untuk koneksi klien saat ini. Ini dikenal sebagai ID soket . Anda dapat mengakses nilai setelah koneksi telah ditetapkan sebagai berikut:
String socketId = pusher. getSocketId ();Untuk informasi lebih lanjut tentang bagaimana dan mengapa ada ID soket, lihat dokumentasi tentang pengguna yang mengautentikasi dan tidak termasuk penerima.
IOS Logging sepertinya tidak menghasilkan konsol berkibar, namun jika Anda menjalankan aplikasi dari Xcode, Anda harus dapat melihat log.
Jika menggunakan server pendorong lokal tetapi tidak dapat berlangganan ke saluran pribadi maka tambahkan ini ke iOS/runner/info.plist Anda:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSAllowsArbitraryLoads</ key >
< true />
</ dict >Jika Anda tahu domain mana yang akan Anda sambungkan untuk ditambahkan:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSExceptionDomains</ key >
< dict >
< key >example.com</ key >
< dict >
< key >NSExceptionAllowsInsecureHTTPLoads</ key >
< true />
< key >NSIncludesSubdomains</ key >
< true />
</ dict >
</ dict >
</ dict >