0

GCM get token ...の次のコードでは例外が発生します。instanceID.GetToken()は例外を返します

protected override void OnHandleIntent(Intent intent) 
{ 
    try 
    { 
     Log.Info("RegistrationIntentService", "Calling InstanceID.GetToken"); 
     lock (locker) 
     { 
      var instanceID = InstanceID.GetInstance(Application.Context); 


      var token = instanceID.GetToken(
       "<Project number>", GoogleCloudMessaging.InstanceIdScope, null);// exception occurred at this line 

      Log.Info("RegistrationIntentService", "GCM Registration Token: " + token); 
      SendRegistrationToAppServer(token); 
      Subscribe(token); 
     } 
    } 
    catch (Exception e) 
    { 
     Log.Debug("RegistrationIntentService", "Failed to get a registration token"); 
     return; 
    } 
} 

例外

にjava.io.IOException: System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw(AT SERVICE_NOT_AVAILABLE) [0x0000c]

フル例外

{Java.IO.IOException:SERVICE_NO System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw(AT T_AVAILABLE) [0x0000c] に/ユーザ/ビルダー/データ/レーン/ 3053/a94a03b5 /ソース/モノ/外部/ referencesource/mscorlib /システム/ランタイム/ exceptionservices/exceptionservicescommon .cs:143 のAndroid.Runtime.JNIEnv.CallObjectMethod(IntPtr jobject、IntPtr jmethod、Android.Runtime.JValue * parms)[0x00064] /Users/builder/data/lanes/3053/a94a03b5/source/monodroid /src/Mono.Android/src/Runtime/JNIEnv.g.cs:195 (Android.Gms.Gcm.Iid.InstanceID.GetToken(System.String authorizedEntity、System.String scope、Android.OS.Bundle extras) [0x00096] in:0: LeaveApplication.Droid.RegistrationIntentService.OnHandleIntent()D:\ Workspaces \ temp \ LeaveApplication \ LeaveApplication \ LeaveApplication \ LeaveApplication.Droid \ RegistrationIntentService.cs:36 ---管理例外スタックトレースの終了--- java .io.IOException:SERVICE_NOT_AVAILABLE com.google.android.gms.iid.zzc.zzb(不明な ソース)com.google.android.gms.iid.zzc.zza(不明なソース) com.google.android md54d5d90974a2844b8ac95dbb0c513d773.RegistrationIntentService.onHandleIntentで md54d5d90974a2844b8ac95dbb0c513d773.RegistrationIntentService.n_onHandleIntent(ネイティブ 法)で com.google.android.gms.iid.InstanceID.getToken(不明なソース)で.gms.iid.InstanceID.zzc(不明なソース) (RegistrationIntentService.java:36) の android.app.IntentService $ ServiceHandler.handleMessage(IntentService.java:65) android.os.Handler.dispatchMessage(Handler.java:102) android.os.Looper.loop(Looper.java:135) ) android.os.HandlerThread.run(HandlerThread.java:61)}

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yourcompany.LeaveApplication" android:installLocation="auto" 
      android:versionCode="1" 
    android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="15" /> 
    <application android:label="XamarinLeaveApp"></application> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="com.yourcompany.LeaveApplication.permission.C2D_MESSAGE" /> 
    <permission android:name="com.yourcompany.LeaveApplication.permission.C2D_MESSAGE" 
       android:protectionLevel="signature" /> 
    <receiver android:name="com.google.android.gms.gcm.GcmReceiver" 
       android:exported="true" 
       android:permission="com.google.android.c2dm.permission.SEND"> 
    <intent-filter> 
     <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
     <category android:name="com.yourcompany.LeaveApplication" /> 
    </intent-filter> 
    </receiver> 
</manifest> 

答えて

1

SERVICE_NOT_AVAILABLEは、ライブラリの有効なエラーである私のアンドロイドのmanifest.xmlで:

デバイスが応答を読み取れないか、サーバーエラーが発生しました。 アプリケーションは、後で指数バックオフ を使用して要求を再試行し、再試行する必要があります。

参照:https://developers.google.com/android/reference/com/google/android/gms/iid/InstanceID.html

、ライブラリが原因(Googleのサーバに到達することは不可能で、通常は接続なし/)デバイス条件や他のサーバーの問題のためにトークンを取得するために失敗した場合、このエラーが発生します。
この場合は、再試行ロジックを実装する責任があります。

注: Google I/O 2016でFirebase Cloud Messaging(FCM)をリリースしました。
は、以下を参照してください。https://firebase.google.com/docs/cloud-messaging

は、ウェブサイトを引用:

これはGCMの新バージョンです。これは、信頼性と拡張性を備えたGCMインフラストラクチャに加えて、新しい機能を継承しています。詳細はFAQを参照してください。 メッセージを新しいアプリに統合する場合は、まずFCMを使用してください。 GCMユーザー は、現在および今後の新しいFCM機能 の恩恵を受けるため、FCMにアップグレードすることを強くお勧めします。

新しいライブラリの大きな利点は、getToken()の自動再試行を自動的に処理できることです。そのロジックを記述する必要はありません。

+0

私の間違いですが、インターネットがデバイス上で動作していない、つまり私の組織から得ています。 –

関連する問題