1

私は、このガイド以下、Xamarin.AndroidアプリケーションでセットアップFirebaseを持っている:問題なく通知を受け取ると、最初に動作するように見え https://developer.xamarin.com/guides/android/application_fundamentals/notifications/remote-notifications-with-fcm/Firebaseからの通知を受信できません。未登録の登録トークン

。その後、コードを更新してDeviceに再デプロイしようとしましたが、その後何も起こりませんでした。私はFirebaseコンソールから通知を受け取ることができませんでした。

私は

  • アンインストールアプリケーションを試してみましたが、新しいFirebaseプロジェクトを削除し、セットアップ
  • Firebaseコンソールから新しいGoogle-service.jsonをダウンロードし、このためにグーグル-service.jsonを更新し、再び
  • を展開しています

アプリケーションが新しくデプロイされ、通知を送信しようとすると何も起こりません。更新と再デプロイ後、コンソールに「登録されていない登録トークン」というエラーが表示されます。

新しいFirebaseプロジェクトをセットアップする前に、トピック「 」を購読しようとすると、次のエラーが発生しますが、この問題は新しいプロジェクトを作成した後に消えてしまっています。トピックに登録すると、しばらくしてからコンソールに表示されます。しかし、トピックに通知を送信しようとすると、結果は得られません。

編集 - を追加しましたコード

MainActivity.cs

[Activity(Label = "<<App Label>>", MainLauncher = true, Icon = "@drawable/icon")] 
public class MainActivity : Activity 
{ 
    private TextView msgText; 
    private const string Tag = "MainActivity"; 
    private FirebaseAnalytics _analytics; 

    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     _analytics = FirebaseAnalytics.GetInstance(this); 

     // Set our view from the "main" layout resource 
     SetContentView (Resource.Layout.Main); 
     msgText = FindViewById<TextView>(Resource.Id.msgText); 

     if (Intent.Extras != null) 
     { 
      foreach (var key in Intent.Extras.KeySet()) 
      { 
       var value = Intent.Extras.GetString(key); 
       Log.Debug(Tag, "Key: {0} Value: {1}", key, value); 
      } 
     } 

     IsPlayServicesAvailable(); 

     var logTokenButton = FindViewById<Button>(Resource.Id.logTokenButton); 
     logTokenButton.Click += delegate { 
      Log.Debug(Tag, "InstanceID token: " + FirebaseInstanceId.Instance.Token); 
     }; 

     var subButton = FindViewById<Button>(Resource.Id.subscribeButton); 
     subButton.Click += SubButton_Click; 
    } 

    private void SubButton_Click(object sender, System.EventArgs e) 
    { 
     FirebaseMessaging.Instance.SubscribeToTopic("A"); 
     Log.Debug(Tag, "Subscribed to A"); 
    } 

    public bool IsPlayServicesAvailable() 
    { 
     int resultCode = GoogleApiAvailability.Instance.IsGooglePlayServicesAvailable(this); 
     if (resultCode != ConnectionResult.Success) 
     { 
      if (GoogleApiAvailability.Instance.IsUserResolvableError(resultCode)) 
       msgText.Text = GoogleApiAvailability.Instance.GetErrorString(resultCode); 
      else 
      { 
       msgText.Text = "This device is not supported"; 
       Finish(); 
      } 
      return false; 
     } 
     else 
     { 
      msgText.Text = "Google Play Services is available."; 
      return true; 
     } 
    } 
} 

StwFirebaseInstanceIdService.cs

[Service] 
[IntentFilter(new []{ "com.google.firebase.INSTANCE_ID_EVENT" })] 
public class StwFirebaseInstanceIdService : FirebaseInstanceIdService 
{ 
    private const string Tag = "StwFirebaseInstanceIdService"; 
    public override void OnTokenRefresh() 
    { 
     var refreshedToken = FirebaseInstanceId.Instance.Token; 
     Log.Debug(Tag, "Refreshed Token: " + refreshedToken); 
     //SendRegistrationToServer(refreshedToken); 
    } 

    private void SendRegistrationToServer(string token) 
    { 

    } 
} 

のAndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="<<Package Name>>" android:versionCode="1" android:versionName="1.0" android:installLocation="auto"> 
<uses-sdk android:minSdkVersion="16" /> 
<application android:label="<<App Label>>"> 
    <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" /> 
    <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" 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="${applicationId}" /> 
     </intent-filter> 
    </receiver> 
</application> 

+0

こんにちはマーティンのために。関連するコードスニペットを投稿してください。サンプルのペイロードと完全なエラーログとともに。 –

+0

アプリを再インストールするときにトークンを更新しましたか? –

+0

@AL。私は元の投稿のプロジェクトからコードを追加しました。 –

答えて

0

私は同じ問題にぶつかりました。アプリ1つのより多くの時間をアンインストールしようとすると、あなたがトークン(古いもの)を取得する前に、リフレッシュトークンを取得するにはリフレッシュトークンを呼び出します。

public override void OnTokenRefresh() 
    { 
     var refreshedToken = FirebaseInstanceId.Instance.Token; 
     Log.Debug(TAG, "Refreshed token: " + refreshedToken); 
     SendRegistrationToServer(refreshedToken); 
    } 

    void SendRegistrationToServer(string token) 
    { // Your custom implementation depends on your server } 

をより多くの情報訪問Here

関連する問題