我正在使用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。
請給出一些解決此問題的建議。