Android _com.google.gms:google-services:3.0.0
_および_com.google.firebase:firebase-auth:9.0.1
_を使用したFirebase Authで問題が発生しました。
Firebase(GoogleまたはFacebook)での認証から1時間後、次のエラーが発生します。
W/PersistentConnection: pc_0 - Authentication failed: expired_token (Auth token is expired)
Firebaseトークンが1時間後に期限切れになるのはなぜですか?この有効期限を延長する方法は?
[〜#〜]更新[〜#〜]
引き続きこの問題が発生し、Firebaseトークンが1時間後に期限切れになります。今、私は次のメッセージを受け取ります:W/PersistentConnection: pc_0 - Authentication failed: invalid_token (Invalid claim 'kid' in auth header.)
どんな助けにも感謝します。
(Google、Facebook、電子メールなど)のようなデフォルトの認証プロバイダーを使用している場合、Firebaseコンソールでアプリケーションの「SHA-1キー」を更新すると、トークンの有効期限の問題が修正されます。
これで ディスカッション Google開発者がこの問題を解決するためのガイドを共有しました。
ガイド: https://drive.google.com/file/d/0B94LePkXiqa6SXVFd3N1NzJHX1E/view
FirebaseInstanceIdService
を実装して更新トークンを取得してください。
登録トークンにアクセスします:
FirebaseInstanceIdService を拡張して、トークンの値にアクセスできます。サービスが manifest に追加されていることを確認してから、getToken
のコンテキストでonTokenRefresh
を呼び出し、次のように値を記録します。
_ @Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
// TODO: Implement this method to send any registration to your app's servers.
sendRegistrationToServer(refreshedToken);
}
_
onTokenRefreshcallbackは、新しいトークンが生成されるたびに発生するため、そのコンテキストで
getToken
を呼び出すと、利用可能な現在の登録トークンに確実にアクセスできます。FirebaseInstanceID.getToken()
は、トークンがまだ生成されていない場合はnullを返します。
コード:
_import Android.util.Log;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
/**
* Called if InstanceID token is updated. This may occur if the security of
* the previous token had been compromised. Note that this is called when the InstanceID token
* is initially generated so this is where you would retrieve the token.
*/
// [START refresh_token]
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
// TODO: Implement this method to send any registration to your app's servers.
sendRegistrationToServer(refreshedToken);
}
// [END refresh_token]
/**
* Persist token to third-party servers.
*
* Modify this method to associate the user's FCM InstanceID token with any server-side account
* maintained by your application.
*
* @param token The new token.
*/
private void sendRegistrationToServer(String token) {
// Add custom implementation, as needed.
}
}
_
お役に立てば幸いです。
Firebaseトークンの新しい最長有効期間は1時間です-私は本日の初めにドキュメントでそれを読みました。
authヘッダーの無効なクレーム 'kid'については、Googleでちょうど2つの検索結果が得られます(:Firebaseのドキュメントにkidに関連するドキュメントはありません。 Googleからの回答を待つ必要があります(または、可能であれば古いバージョンのFirebaseに切り替えます)。