2016-03-19 20 views
2

私はPushSharpライブラリを使用してXamarin.Android Appにプッシュ通知を送信しています。アプリを起動するたびにGCMの登録を確認しています。登録が切れた場合は、デバイストークンをサーバーに送信しています。時々私は、ログ内のデバイスのサブスクリプションが期限切れになった - 修正

デバイスサブスクリプションの有効期限が切れ例外

を取得しています。この例外のために、私のデバイスは通知を受け取っておらず、自動的に解決されることがあり、通知を受けるようになっています。何が起こっているのか分かりません。この問題を解決するには?

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

は私がDBから期限切れのトークンを削除することもできますが、私の混乱は、実際にデバイストークンの有効期限が切れていないです。

私は以下のようにDeviceSubscriptionExcpetionを扱うことができます。デバイスは有効ですが、この例外のために通知を受け取ることができないことがあります。

thisスレッドによれば、同じデバイスに対して複数の登録がある場合にのみ発生します。しかし、ユニークなデバイスIDに対してデバイストークンを保存しています。私は以下のようにデバイスIDを取得しています:

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; 
        } 
       } 
      } 

そのデバイスIDが一意であるが、そのほとんどの時間を変更することを言っていても。私はこの例外を修正するために推測している他の方法は、Androidデバイスで常に一意のIDを取得することです。

この問題を解決するには、いくつかご提案ください。 DeviceSubscriptonExpiredException例外の

答えて

0

チェックNewSubscriptionIdプロパティが空の場合、あなたは(「com.google.android.c2dm.intent.REGISTER」との意思を開始)お使いの携帯電話に新しいregistrationIdを要求する必要があります。

まれに、アプリケーションを再インストールしてみてください。

関連する問題