SORU
30 Mayıs 2013, PERŞEMBE


Google yol tutuş Kayıt NUMARASI değişiklikleri Android Mesajlaşma Bulut

Google Bulut Mesajlaşma üzerine doktorlar belirtir:

Android uygulaması daha sonra kullanmak için bu KİMLİĞİNİ saklamak gerekir (için eğer zaten kayıtlı) ise örnek, onCreate kontrol etmek için (). Not Google düzenli olarak kayıt ID, yani yenileme bu anlayışı ile Android Uygulama tasarımı gerekir com.google.android.c2dm.niyet.KAYIT niyet denebilir birden çok kez. Android uygulaması yanıt vermek gerekir buna göre.

Benim cihaz aşağıdaki kodu kullanarak kayıt:

GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
String regID = gcm.register(senderID);

GoogleCloudMessaging sınıfı kayıt işlemi saklar. Nasıl com işlemek gerekiyor.google.android.c2dm.niyet.İçten GoogleCloudMessaging sınıfı tarafından yapılan işleme beri KAYIT?

CEVAP
30 Mayıs 2013, PERŞEMBE


Bu ilginç bir soru.

Google yeni kayıt işlemi için geçiş yapmak için teşvik etmek

Bir Android Uygulama mobil cihaz üzerinde çalışan GoogleCloudMessaging yöntemi kaydetmek arayarak mesajlarını(Gönderen kimliği...) kaydeder. Bu yöntem, HGK için uygulama kayıtları ve kayıt KİMLİĞİNİ verir. Bu standartlaştırılmış yaklaşım önceki HGK kayıt işlemi değiştirir.

Google may periodically refresh the registration ID diyor not sadece hala eski kayıt sürecini gösteren sayfada görünür, bu not artık alakalı olabilir.

Eğer güvende olmak istiyorsanız, hala eski kayıt işlemi kullanabilirsiniz. Ya da Eğer kayıt KİMLİĞİNİ yenilemek için karar Google ne zaman kapalı olduğundan emin olmak için yeni bir süreç kullanabilirsiniz, ama ayrıca com.google.android.c2dm.intent.REGISTRATION niyet işleyen bir kod var.

O dedi ki, ben hiçbir zaman yaşanan bu tür bir yenileme ve hatta zaman yaptığım deneyim bir değişiklik kayıt NUMARASI (genellikle bir sonucu olarak gönderen bir bildirim sonra un-yükleme uygulaması ve yeniden yükleme), eski Kayıt NUMARASI hala çalışıyordu (kaynaklanan bir kurallı Kayıt NUMARASI gönderilen yanıttan Google), bu yüzden hiçbir zarar yapıldı.

DÜZENLE (06.06.2013) :

Google yeni arabirimi kullanmak için* *9 kendi değişti. Değeri yerel olarak uygulama tarafından kalıcı bir son kullanma tarihi ayarlayarak kayıt KİMLİĞİNİ yenilemek. App başladığında, onlar yerel olarak depolanan Kayıt numarası yük. Eğer öyle ise "" demo HGK 7 gün önce alındığı anlamına gelir), diyorlar gcm.register(senderID) tekrar. süresi dolmuş

Bu bir kayıt KİMLİĞİ uzun süre piyasaya sürülmedi bir uygulama Google tarafından yenilenir varsayımsal senaryo işlemez. Bu durumda, app değişikliğin farkında olmayacak, ne de 3. parti sunucu olacak.

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    mDisplay = (TextView) findViewById(R.id.display);

    context = getApplicationContext();
    regid = getRegistrationId(context);

    if (regid.length() == 0) {
        registerBackground();
    }
    gcm = GoogleCloudMessaging.getInstance(this);
}

/**
 * Gets the current registration id for application on GCM service.
 * <p>
 * If result is empty, the registration has failed.
 *
 * @return registration id, or empty string if the registration is not
 *         complete.
 */
private String getRegistrationId(Context context) {
    final SharedPreferences prefs = getGCMPreferences(context);
    String registrationId = prefs.getString(PROPERTY_REG_ID, "");
    if (registrationId.length() == 0) {
        Log.v(TAG, "Registration not found.");
        return "";
    }
    // check if app was updated; if so, it must clear registration id to
    // avoid a race condition if GCM sends a message
    int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
    int currentVersion = getAppVersion(context);
    if (registeredVersion != currentVersion || isRegistrationExpired()) {
        Log.v(TAG, "App version changed or registration expired.");
        return "";
    }
    return registrationId;
}

/**
 * Checks if the registration has expired.
 *
 * <p>To avoid the scenario where the device sends the registration to the
 * server but the server loses it, the app developer may choose to re-register
 * after REGISTRATION_EXPIRY_TIME_MS.
 *
 * @return true if the registration has expired.
 */
private boolean isRegistrationExpired() {
    final SharedPreferences prefs = getGCMPreferences(context);
    // checks if the information is not stale
    long expirationTime =
            prefs.getLong(PROPERTY_ON_SERVER_EXPIRATION_TIME, -1);
    return System.currentTimeMillis() > expirationTime;
}

DÜZENLE (08.14.2013) :

Google yine Demo App değişti (iki gün önce). Bu sefer Kayıt NUMARASI 7 gün sonra süresi olarak kabul ettiği mantık çıkardılar. Şimdi onlar app yeni bir sürümü yüklü olduğunda Kayıt NUMARASI yenileyin.

DÜZENLE (04.24.2014) :

Bütünlüğü uğruna, burada Costin Manolache sözleri (here alınan), Google bir geliştirici bu konuda HGK: geliştirilmesinde rol

'Yenileme olmamış ve kayıt yenileme periyodik yeni ROTA, kütüphane dahil değildir.

Kayıt NUMARASI değiştirmek için bilinen tek nedeni uygulamalar eski hata değildir alıyorum eğer bir mesaj ise aldıkları takdirde otomatik olarak kayıtsız yükseltilmiş almak. Bu hata çözülene kadar uygulamalar hala aramak gerekir (kayıt olmanız sonra, ve şimdiye kadar kayıt NUMARASI değişikliği olabilir bu durum. Kaydı() çağrılıyor açıkça genellikle değişiklikler Kayıt NUMARASI de.

Öneri/çözüm kendi rasgele tanımlayıcı oluşturmak için. örneğin paylaşılan bir tercih olarak kaydedilmiş. Her uygulama yükseltme tanımlayıcı ve potansiyel yeni kayıt ID karşıya. Bu ayrıca, yükseltme ve kayıt izleme hata ayıklama yardımcı olabilir sunucu tarafında bir değişiklik.

Bu resmi HGK Demo uygulama geçerli uygulama açıklar. com.google.android.c2dm.intent.REGISTRATION hiç kayıt GoogleCloudMessaging sınıfı kullanırken ele alınmalıdır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • kremosakhaz

    kremosakhaz

    25 AĞUSTOS 2006
  • Matus Slovak

    Matus Slovak

    5 Temmuz 2007
  • Modus Recordings

    Modus Record

    26 Kasım 2008