Ошибка аутентификации Firebase Android: expired_token (срок действия маркера Auth)

Я столкнулся с проблемой с Android Firebase Auth, используя com.google.gms:google-services:3.0.0 и com.google.firebase:firebase-auth:9.0.1.

Через 1 час после аутентификации с Firebase (Google или Facebook) я получаю следующую ошибку:

W/PersistentConnection: pc_0 - Authentication failed: expired_token (Auth token is expired)

Почему токен Firebase истекает через 1 час и как продлить этот срок действия?

UPDATE

Я все еще сталкиваюсь с этой проблемой, токен Firebase истекает через 1 час. Теперь я получаю следующее сообщение: W/PersistentConnection: pc_0 - Authentication failed: invalid_token (Invalid claim 'kid' in auth header.)

Я ценю любую помощь.

Ответ 1

Если мы используем поставщики Auth по умолчанию, такие как (Google, Facebook, электронная почта..), обновление "SHA-1 key" вашего приложения в консоли firebase устранит проблему истечения срока действия токена.

В этом обсуждении разработчик Google поделился руководством для решения этой проблемы.

Руководство: https://drive.google.com/file/d/0B94LePkXiqa6SXVFd3N1NzJHX1E/view

Ответ 2

Попробуйте реализовать 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 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 servers.
        sendRegistrationToServer(refreshedToken);
    }
    // [END refresh_token]

    /**
     * Persist token to third-party servers.
     *
     * Modify this method to associate the user 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.
    }
}

Я надеюсь, что это поможет вам.

Ответ 3

Новый максимальный срок службы для токенов Firebase составляет 1 час - я прочитал его в документах ранее сегодня.

Что касается неверного утверждения 'kid' в заголовке auth, я получаю ровно 2 результата поиска в Google для этого (: Нет документации, связанной с малышами в документах Firebase. Думаю, нам придется ждать ответов от Google (или переключиться вернитесь к старой версии Firebase, если это возможно).