Penundaan pesan hilir Google Cloud Messaging (GCM).

Saya telah mengunduh dan menyiapkan Android gcm-client dan gcm-demo-server (server http) dari http://code.google.com/p/gcm/ . Saya telah berhasil menerima pesan hilir di aplikasi klien gcm Android saya. Saya telah melakukan banyak tes dengan karakteristik sebagai berikut:

  1. Server menggunakan kunci API browser atau kunci API server.
  2. Koneksi datanya 3G atau WiFi
  3. Pesan terkirim termasuk/tidak menyertakan data tambahan.
  4. Pesan terkirim memiliki/tidak memiliki kunci penciutan.
  5. Pesan terkirim memiliki delayWhileIdle yang disetel ke false.
  6. Pesan terkirim memiliki timeToLive yang disetel ke 0 atau 5 menit.
  7. Server terletak di dua lokasi berbeda di Eropa.
  8. Aplikasi Android berjalan di dua perangkat yang berlokasi di tempat berbeda di Eropa.

Dalam semua kasus, aplikasi menerima pesan terkirim setelah 25-30 detik sejak pesan dikirim. Namun, saya telah menguji aplikasi Android lain yang menggunakan pesan hilir GCM dan dalam sebagian besar kasus, pesan tiba hampir seketika (‹5 detik).

Apakah ada sesuatu yang dapat saya ubah di klien atau server agar pesan dapat diterima di aplikasi lebih cepat?

Saya juga mencoba menggunakan server gcm XMPP (aplikasi Java menggunakan Smack) yang diberikan di http://developer.android.com/google/gcm/ccs.html namun saya tidak berhasil mengirim pesan apa pun. Tanggapan yang saya terima dari GCM Cloud Connection Server (CCS) mengatakan "Proyek XXXXXXXXXX tidak masuk daftar putih". Alasan yang paling mungkin adalah pendaftaran CCM saya belum disetujui seperti yang dijelaskan di Google CCS (GCM) - proyek tidak masuk daftar putih . Seperti yang saya baca di berbagai website, persetujuan biasanya memakan waktu lebih dari 2-3 bulan, jadi kemungkinan besar saya tidak akan bisa segera menguji server XMPP.

Mungkinkah Anda hanya dapat menerima pesan hampir instan dengan menggunakan server XMPP? Adakah yang punya pengalaman tentang penundaan yang dialami saat menggunakan server XMPP?

Terima kasih sebelumnya


person retset    schedule 21.01.2014    source sumber
comment
Bagaimana Anda tahu bahwa aplikasi Android lainnya mengalami penundaan sebesar ‹5 detik? Menurut saya 25-30 detik sangat wajar, untuk layanan yang mampu mengirim/menyiarkan pesan ke jutaan perangkat.   -  person Flow    schedule 21.01.2014
comment
Dengan mengujinya. Misalnya, dalam aplikasi pesan teks Anda dapat mengirim pesan sebagai pengguna dan menerimanya sebagai pengguna lain dan mengukur waktu pengiriman.   -  person retset    schedule 22.01.2014
comment
Dan bagaimana Anda tahu bahwa GCM terlibat dalam penyampaian pesan?   -  person Flow    schedule 22.01.2014
comment
Dengan memantau paket yang diterima aplikasi dari host jarak jauh (server GCM) pada port 5228.   -  person retset    schedule 22.01.2014


Jawaban (1)


Saya pikir masalahnya ada pada demo klien gcm Android yang menyimpan pesan, bukan di server gcm. Pada file GcmIntentService.java demo gcm-client, terlihat bahwa fungsi protected void onHandleIntent(Intent Intent) memiliki kode berikut:

[...]
// If it's a regular GCM message, do some work.
} else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {
// This loop represents the service doing some work.
    for (int i = 0; i < 5; i++) {
    Log.i(TAG, "Working... " + (i + 1)
            + "/5 @ " + SystemClock.elapsedRealtime());
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
    }
}
[...]

Kode ini menidurkan aplikasi Android 5 detik setiap iterasi (total 25 detik) sebelum mengirimkan pesan notifikasi. Anda dapat menghapus kode ini karena ini adalah sebuah contoh dan Anda dapat memasukkan ke dalam pernyataan else if beberapa berfungsi sebelum menampilkan pemberitahuan.

Saya telah mengimplementasikan server xmpp dan saya menerima pemberitahuan dalam ‹5 detik, tentu saja tanpa kode yang berfungsi ini.

Semoga ini bisa membantu dan maaf atas bahasa Inggris saya yang buruk.

person zhalk    schedule 30.07.2014
comment
Selamatkan saya, mengapa mereka memasukkan potongan kode ini??!? jadi tidak perlu.. Terima kasih! - person idish; 05.12.2014