Pertanyaan Apa yang seharusnya menjadi aliran sistem yang sesuai untuk fungsionalitas layanan push-notification yang dikembangkan menggunakan PHP dan Pushwoosh?


Aku seorang Pengembang PHP dengan profesi. Jadi, saya tidak memiliki banyak pengetahuan tentang aplikasi seluler, iOS, Android, dll. Seperti hal-hal seperti itu. Jadi, tolong pahami saya.

Saya telah mengembangkan aplikasi menggunakan iOS oleh tim pengembangan masing-masing. Sekarang, saya harus menyediakan aplikasi ini Push-Notifications menggunakan Pushwoosh.

Saya telah memahami apa yang dimaksud dengan push notification dan penggunaan Pushwoosh untuk yang sama. Juga, saya dapat mengirim contoh pemberitahuan push dengan menggunakan app_id dan auth_key yang saya dapatkan Panel Kontrol Pushwoosh. Ketika saya menjalankan file PHP yang sesuai dari server, 'Pesan Sukses' dengan kode status yang benar saya terima.

Pertanyaan saya adalah tentang bagaimana menerapkan layanan push-notification ini ke dalam aplikasi dari sudut pandang sisi server?

Sekarang untuk ini mari kita pertimbangkan hal yang lebih dinamis dan praktis.

Sebenarnya ada satu meja di database MySQL yang berisi notifikasi. Segera setelah setiap entri baru dimasukkan ke dalam tabel itu saya sudah memeriksa apakah itu (pemberitahuan) untuk pengguna yang masuk atau tidak. Jika ada / apakah ada pemberitahuan baru yang dibuat untuk pengguna yang sudah masuk, saya harus mengirim pemberitahuan push ke pengguna yang bersangkutan ke perangkatnya masing-masing melalui 'Pushwoosh'.

Sekarang pertanyaan saya adalah apakah file PHP yang berisi kode untuk memeriksa pemberitahuan baru dan mengirimnya sebagai pemberitahuan push dipanggil dari sisi aplikasi atau apakah ada cara lain?

Dengan kata lain keraguan saya haruskah ini memeriksa pemberitahuan baru harus dilakukan hanya atas permintaan yang berasal dari aplikasi?

Saya membahas masalah yang sama dengan tim pengembangan aplikasi seluler, mereka mengatakan kepada saya bahwa kami tidak mengirimi Anda permintaan apa pun, Anda hanya perlu mengirimkan pemberitahuan push kepada kami. Mereka memberi tahu saya arti pemberitahuan push hanya sama bahwa aplikasi tidak pernah mengirim permintaan ke server, server itu sendiri harus mengirimkan pemberitahuan ke aplikasi kapan pun tersedia.

Kemudian dalam hal ini bagaimana seharusnya file PHP yang berisi kode harus dijalankan karena tidak ada permintaan yang diterima untuk itu?

Pertanyaan lain di sini adalah jika aplikasi tidak akan mengirim permintaan apa pun ke file PHP lalu bagaimana saya harus tahu pengguna mana yang masuk dan meminta pemberitahuan baru yang dibuat untuknya, jika ada?

Misalkan, jika permintaan telah datang untuk file PHP maka saya harus membuat otentikasi berbasis token dalam kode PHP untuk pengguna tertentu atau itu akan dilakukan pada sisi aplikasi dan hanya setelah memvalidasi pengguna berhasil mereka akan mengirim permintaan ke file PHP ?

Juga, cek pemberitahuan baru harus dibuat setiap dua menit interval (polling). Dari mana pemeriksaan ini harus dilakukan? Maksud saya apakah file PHP menerima permintaan dari aplikasi untuk setiap dua menit atau apa?

Tolong bantu saya menyelesaikan masalah yang membosankan ini.

Terima kasih.

Berikut ini adalah contoh kode saya (Token Autentikasi dan ID Aplikasi telah diubah untuk tujuan keamanan):

<?php
  define('PW_AUTH', 'XXXXXXXXXXX');
  define('PW_APPLICATION', 'XXXXXXXXXXX');
  define('PW_DEBUG', true);

  function pwCall($method, $data) {
    $url = 'https://cp.pushwoosh.com/json/1.3/' . $method;
    $request = json_encode(['request' => $data]);

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);

    $response = curl_exec($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);

    if (defined('PW_DEBUG') && PW_DEBUG) {
      print "[PW] request: $request\n";
      print "[PW] response: $response\n";
      print "[PW] info: " . print_r($info, true);
    }
  }

  pwCall('createMessage', array(
    'application' => PW_APPLICATION,
    'auth' => PW_AUTH,
    'notifications' => array(
            array(
                'send_date' => 'now',
                'content' => 'test',
                'data' => array('custom' => 'json data'),
                'link' => 'http://pushwoosh.com/'
            )
        )
    )
  );  
?>

Dalam kode di atas hanya saya akan mengintegrasikan kode untuk memeriksa dan mengirim pemberitahuan baru jika tersedia.


8
2018-06-04 03:00


asal


Jawaban:


Mari kita mulai dengan instalasi aplikasi iOS. Tim iOS harus berhati-hati untuk mendaftarkan perangkat setelah instalasi ke Apple Push Notification Server (APNS) dan mendapatkan token push.

Saat login mereka harus mengirimkan token push ini ke server PHP dan server harus berhati-hati menyimpannya bersama dengan data pengguna. Biasanya (tetapi tidak wajib) setelah berhasil masuk server harus menghasilkan beberapa token unik dan mengirimkannya kembali ke perangkat yang akan digunakan setelah itu untuk komunikasi di antara mereka. Jika tidak ada persyaratan kedaluwarsa, token ini cukup bagus untuk diketahui bahwa pengguna masuk.

Jika kedaluwarsa diperlukan daripada server harus menyimpan cap waktu saat token dihasilkan dan menyimpannya ke DB. Ini juga mengharuskan untuk memperbarui stempel waktu setiap kali pengguna berinteraksi dengan aplikasi / server.

Tugas cron dapat diatur untuk berjalan pada setiap 2 menit yang akan memanggil skrip PHP. Skrip PHP ini melalui tabel di DB dan memeriksa pemberitahuan baru dan jika menemukan seperti itu, harus mencoba mengirim pemberitahuan push. Jika diperlukan pemeriksaan 'login', skrip harus memeriksa token pengguna dan sukses harus mengirim a /createMessage Permintaan API ke Pushwoosh dengan token push perangkat yang sesuai. Parameter dalam permintaan JSON harus terlihat seperti ini:

"devices":["dec301908b9ba8df85e57a58e40f96f523f4c2068674f5fe2ba25cdc250a2a41"]

Perhatikan bahwa Anda dapat menambahkan di sini hingga 1000 token push.

Dengan cara ini Anda akan mengirim pemberitahuan push ke perangkat pengguna konkret.

Harap dicatat di sini, bahwa 1 pengguna dapat menginstal aplikasi di beberapa perangkat. Dalam hal ini semua token push harus disimpan dan digunakan saat mengirim pemberitahuan push.

Kuharap aku tidak melewatkan sesuatu.


1
2017-08-11 10:21



Notifikasi push sering digunakan untuk membawa pengguna ke suatu aplikasi ketika mereka tidak masuk untuk sementara atau ketika ada acara atau promosi yang sedang berlangsung. Karena itu sebagian besar notifikasi push tidak dapat mengandalkan permintaan dari aplikasi itu sendiri.

Dalam hal ini entri baru dalam database MySQL adalah kondisi untuk mengirimkan pemberitahuan push, jadi saya akan membuat file PHP yang akan dijalankan pada jadwal reguler untuk memeriksa baris baru yang tidak terkirim dalam database MySQL. Cara terbaik untuk meminta skrip PHP pada jadwal adalah menyiapkan tugas cron di server Anda untuk berjalan setiap dua menit. Ada banyak informasi tentang pengaturan pekerjaan cron di internet, dan sebagian besar tim ops dapat melakukannya untuk Anda. Tetapi jika Anda perlu / ingin mengaturnya sendiri, langkah dasarnya adalah:

  1. SSH masuk ke server yang akan menjalankan skrip
  2. Menjalankan crontab -e untuk mengedit file konfigurasi cron
  3. Tambahkan perintah cron. Ini ingin sesuatu seperti ini:

    */2 * * * * cd /absolute/script/path && php script_name.php
    
  4. Simpan dan keluar dari file

Itu */2 berarti itu akan berjalan setiap 2 menit, sisanya *karakter berarti skrip akan berjalan setiap jam, hari, bulan, dan hari-minggu. Terakhir adalah perintah baris perintah untuk dieksekusi. Mengubah direktori sebelum menjalankan file PHP akan memberi Anda perilaku direktori kerja saat ini yang sama seperti meminta file PHP dari server web.

Ada sejumlah cara untuk mengidentifikasi apakah pengguna masuk. Salah satu yang saya sarankan adalah memiliki bidang di DB yang akan diperbarui dengan status masuk dan waktu tindakan terakhir yang dibuat pengguna saat masuk. Waktu terakhir tindakan berguna karena pengguna sering tidak keluar dari aplikasi dan malah menutupnya. Anda dapat menggunakan waktu sejak tindakan terakhir mereka sebagai cara untuk melihat apakah aplikasi sudah tidak aktif cukup lama untuk menganggap bahwa pengguna tidak lagi menggunakannya. Bidang yang sudah masuk ini juga dapat disimpan dalam lapisan caching jika aplikasi Anda menggunakan salah satu untuk mengurangi beban DB.

Dalam hal otentikasi token, itu harus berasal dari sisi aplikasi. Perangkat iOS mengharuskan pengguna memberikan izin ke aplikasi sebelum token pemberitahuan push dibuat dan dikirim ke aplikasi itu sendiri. Ini adalah sesuatu yang harus diperhatikan oleh tim pengembangan aplikasi, dan mereka harus dapat memberi Anda lokasi token ini disimpan, atau setidaknya membantu Anda membuat solusi penyimpanan untuk token. Jika Anda menyimpan token pemberitahuan push dan id pengguna terkait dalam DB MySQL, itu seharusnya hanya berupa pencarian sederhana untuk mengakses token autentikasi mereka.

Untuk meringkas informasi di atas, saya akan membuat solusi yang serupa dengan yang berikut:

Sisi Aplikasi:

  1. Aplikasi penginstalan pengguna, setuju untuk menerima pemberitahuan push
  2. Token autentikasi push notification dibuat, simpan ini dalam DB yang dikaitkan dengan pengguna

Sisi PHP:

  1. Pada titik tertentu, pemberitahuan push ditambahkan ke database MySQL dan perlu dikirim keluar
  2. Tugas cron menjalankan skrip PHP Anda setiap dua menit
  3. Script PHP memeriksa DB untuk baris yang belum dikirim (kolom boolean sederhana harus cukup untuk ini)
  4. Periksa DB untuk status pengguna yang masuk. Jika disetel untuk masuk, periksa untuk memastikan tindakan terakhir mereka belum lama ini
  5. Untuk setiap pemberitahuan push tidak terkirim dengan pengguna yang memiliki status login yang sesuai, cari token otentikasi untuk pengguna dalam DB
  6. Kirim token otentikasi dan pesan pemberitahuan push dari Pushwoosh untuk menangani pengiriman pesan
  7. Perbarui baris pemberitahuan push di DB sebagai yang dikirim

1
2017-08-17 04:15