私は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
例外の