2017-08-23 8 views
2

私は似たようないくつかの記事がありますが、結果のないソリューションのリストを見てきました。私のAndroidアプリは、起動時にトークンを取得し、後で使用できるようにコールバック経由でメインアクティビティに渡すことになっている非常に簡単なfirebase実装を備えています。トークンは起動時に生成されるはずだと聞いたことがあるが、最初のアプリのインストール時にはそれを受け取ることはなく、アプリケーションがクラッシュする。私は私のアプリケーションを(最初に削除することなく)再びインストールすると、すべて正常に動作し、私は自分のトークンを取得します。最初のアプリのインストール時にonTokenRefresh()が呼び出されることはありません

私が試した:

  • 更新と私のfirebaseを統合するには、私のマニフェストは、私のインスタンスIDを削除し、正しいfirebaseサービス/インターネットのアクセス権
  • を使用していることを確認
  • アプリのbuild.gradleファイルの依存関係FirebaseInstanceId.getInstance()。deleteInstanceId()を手動で呼び出す前に getToken()
  • 複数のデバイスでテストする

    E/FA: Discarding data. Failed to send app launch 
    E/FA: Failed to get app instance id 
    

    マイInstanceIdService:

    public class InstanceIDService extends FirebaseInstanceIdService { 
    
        TokenCallback callback; 
    
        public void initInstanceIDService(TokenCallback cb) { 
         this.callback = cb; 
        } 
    
        @Override 
        public void onTokenRefresh() { 
         super.onTokenRefresh(); 
    
         // Get updated token. 
         String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
    
         if (refreshedToken != null) { 
          callback.onTokenReceived(refreshedToken); 
         } 
         //pass token to manager for use during authentication 
         Log.d("Firebase", "Refreshed token: " + refreshedToken); 
        } 
    
        public interface TokenCallback { 
    
         void onTokenReceived(String token); 
        } 
    } 
    

    私のマニフェスト:

    /<!-- FCM --> 
         <service 
          android:name="com.traitware.Authentication.Prime.twshell.network.MessagingService"> 
          <intent-filter> 
           <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
          </intent-filter> 
         </service> 
         <service 
          android:name="com.traitware.Authentication.Prime.twshell.network.InstanceIDService"> 
          <intent-filter> 
           <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> 
          </intent-filter> 
         </service> 
    

    私の最初のインストール時に、私のlogcatを見ると氷

は、私はこれらの2つのfirebaseエラーが発生しますGradle依存関係:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 

    compile 'com.google.firebase:firebase-core:11.0.4' 
    compile 'com.google.firebase:firebase-messaging:11.0.4' 
    compile 'com.android.support:appcompat-v7:+' 
    compile project(path: ':twlibrary') 
} 

apply plugin: 'com.getkeepsafe.dexcount' 
apply plugin: 'com.google.gms.google-services' 

私は物理デバイスでテストしており、すべて同じ動作を返します。

この問題を経験したことがある人は、どんな提案や解決策もありがとうございます。

+0

[this one](https://stackoverflow.com/q/45054620/4815718)などのいくつかの投稿では、同じエラーメッセージが表示されます。これは、古いバージョンのGoogle Playサービスログキャットには「Google Playサービスが古くなっています」というメッセージが含まれていますか? –

+0

[Firebase FCM force onTokenRefresh()]と重複している可能性があります(https://stackoverflow.com/questions/37454501/firebase-fcm-force-ontokenrefresh-to-be-called) – Yoni

+0

@Bob Snyder - それが問題でした。私はFirebaseの依存関係をダウングレードし、問題は解決しました。コメントとして回答を投稿すると、私は喜んでそれを受け入れます。ご協力ありがとうございました! – deMouser

答えて

1

この問題は、使用しているFirebaseライブラリのバージョンと互換性のない古いバージョンのGoogle Playサービスがデバイスまたはエミュレータで実行されている場合に発生する可能性があります。この条件が存在する場合、logcatは、この警告メッセージが含まれています:

W/GooglePlayServicesUtil: Google Play services out of date. Requires XXXXXXXX but found XXXXXXXX 

ソリューションは、Googleがサービスを再生更新、またはFirebaseのバージョンをダウングレードすることです。

FirePass APIには互換性のあるバージョンのGoogle Playサービスが必要なため、GoogleApiAvailabilityを使用して、アプリの初期化中に互換性のあるバージョンが存在することを確認することをおすすめします。

関連する問題