2016-03-19 4 views
2

Ich verwende die PushSharp-Bibliothek, um die Push-Benachrichtigung an meine Xamarin.Android App zu senden. Jedes Mal, wenn ich die App starte, überprüfe ich die GCM-Registrierung. Wenn die Registrierung abläuft, sende ich das Geräte-Token an den Server. Manchmal bekomme ichGeräteabonnement abgelaufen - Fix

Geräte Abonnement abgelaufen Ausnahme

in log. Aufgrund dieser Ausnahme empfängt mein Gerät keine Benachrichtigung und manchmal wird es automatisch gelöst und ich bekomme Benachrichtigungen. Ich bin mir nicht sicher, was passiert. Wie behebe ich dieses Problem?

Ich konnte behandeln DeviceSubscriptionExcpetion wie folgt:

gcmBroker.OnNotificationFailed += (notification, aggregateEx) => 
{ 
    if (ex is DeviceSubscriptonExpiredException) 
    { 
    var subExc = ex as DeviceSubscriptonExpiredException; 
    } 
} 

ich das abgelaufene Token von DB löschen konnte, aber meine Verwirrung ist eigentlich Gerät Token nicht abgelaufen ist. Das Gerät ist gültig, kann aber aufgrund dieser Ausnahme manchmal keine Benachrichtigung erhalten.

Nach this Thread passiert es nur, wenn wir mehrere Registrierung für das gleiche Gerät haben. Aber ich speichere Geräte-Token gegen eindeutige Geräte-ID. Ich erhalte Geräte-ID wie folgt:

try 
      { 
       var telephonyManager = (TelephonyManager)Forms.Context.GetSystemService(Android.Content.Context.TelephonyService); 
       if (telephonyManager != null) 
       { 
        deviceId = telephonyManager.DeviceId; 

        if (string.IsNullOrEmpty(deviceId)) 
        { 
         deviceId = Android.OS.Build.Serial; 
        } 
       } 
      } 

Obwohl sein sagte, dass Geräte-ID ist einzigartig, aber die meiste Zeit zu ändern. Eine andere Möglichkeit, diese Ausnahme zu beheben, besteht darin, eine ID zu erhalten, die im Android-Gerät immer eindeutig ist.

Bitte geben Sie einen Vorschlag, um dieses Problem zu beheben.

Antwort

0

prüfen NewSubscriptionId Eigenschaft DeviceSubscriptonExpiredException Ausnahme, wenn es leer ist, dann müssen Sie die neue registrationId auf Ihrem Telefon anfordern (eine Absicht mit „com.google.android.c2dm.intent.REGISTER“ beginnen).

In seltenen Fällen versuchen Sie die Anwendung neu zu installieren.