2016-03-19 109 views
2

我正在使用PushSharp庫向我的Xamarin.Android應用發送推送通知。每次啓動應用程序時,我正在檢查GCM註冊,並且如果註冊過期,我將設備令牌發送到服務器。有時候,我得到設備訂閱已過期 - 修復

設備訂閱過期異常

日誌

。由於此例外,我的設備未收到通知,有時會自動解決,因此我開始接收通知。我不確定發生了什麼事。如何解決這個問題?

我能勝任DeviceSubscriptionExcpetion如下:

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

我可以刪除數據庫過期的道理,但我的困惑實際上是設備令牌沒有過期。設備有效,但由於此例外,有時無法接收通知。

根據this線程它只發生在我們有多個註冊的同一個設備。但我將設備標記存儲在唯一的設備標識中。我正在獲取設備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。

請給出一些解決此問題的建議。

回答

0

檢查NewSubscriptionId財產DeviceSubscriptonExpiredException例外的,如果它是空的,那麼你需要在手機上申請新的registrationId(用「com.google.android.c2dm.intent.REGISTER」啓動意圖)。

在一些極少數情況下,請嘗試重新安裝應用程序。