Wanneer verloopt een FCM-token?

Wanneer verlopen FCM-tokens? Is het na 6 maanden?


Antwoord 1, autoriteit 100%

Het verloopt echter niet. Het vernieuwt zichzelf als een van de volgende situaties zich voordoet.

Volgens https://firebase.google.com/docs/cloud- messaging/android/client:

  1. -De app verwijdert instantie-ID
  2. -De app is hersteld op een nieuw apparaat
  3. -De gebruiker verwijdert de app/installeert de app opnieuw
  4. -De gebruiker wist app-gegevens.

Tokengeneratie bewaken

De onTokenRefreshcallback wordt geactiveerd wanneer een nieuw token wordt gegenereerd, dus
het aanroepen van getToken in zijn context zorgt ervoor dat u toegang krijgt tot een
huidige, beschikbare registratietoken. Zorg ervoor dat je de . hebt toegevoegd
service naar uw manifest en roep vervolgens getToken aan in de context van
onTokenRefresh, en log de waarde zoals getoond:

@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);
    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // Instance ID token to your app server.
    sendRegistrationToServer(refreshedToken);
}

BEWERKEN

onTokenRefresh()wordt nu afgeraden. onNewToken()moet in plaats daarvan worden gebruikt.


Antwoord 2

Zoals vermeld in de documentatie hierde token verloopt niet, het verandert alleen bij bepaalde evenementen. Telkens wanneer een nieuw token wordt gegenereerd, wordt een methode onTokenRefereshId aangeroepen. Om dit te implementeren, moet u een klasse maken die FirebaseInstanceIdService uitbreidt en de onRefreshToken als volgt overschrijven:

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
    @Override
    public void onTokenRefresh() {
        // Get updated InstanceID token.
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG, "Refreshed token: " + refreshedToken);
        // If you want to send messages to this application instance or
        // manage this apps subscriptions on the server side, send the
        // Instance ID token to your app server.
        sendRegistrationToServer(refreshedToken);
    }
}

Vergeet ook niet om deze dienst te registreren in de manifesten

<service
    android:name=".MyFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>

Antwoord 3

Met firebase admin kunt u dit doen:

async function isValidDeviceToken (deviceToken) {
  const {
    results: [notifResult]
  } = await firebaseAdmin.messaging().sendToDevice(
    deviceToken,
    {
      notification: {
        title: 'Device Registration',
        message: 'Your device has been registered.'
      }
    },
    {
      dryRun: true
    }
  );
  // returns true if valid, false if not.
  return !notifResult.error;
}

wat het doet, is dat het controleert of de verstrekte deviceTokengeldig is, achter de schermen controleert de firebase-beheerder of de deviceTokenis geregistreerd. Als het niet is geregistreerd, wordt de volgende fout geretourneerd:

{
  error: FirebaseMessagingError: The provided registration token is not registered. A previously valid registration token can be unregistered for a variety of reasons. See the error documentation for more details. Remove this registration token and stop using it to send messages.
      at FirebaseMessagingError.FirebaseError [as constructor] (/Users/aprilmintacpineda/projects/my-app/node_modules/firebase-admin/lib/utils/error.js:44:28)
      at FirebaseMessagingError.PrefixedFirebaseError [as constructor] (/Users/aprilmintacpineda/projects/my-app/node_modules/firebase-admin/lib/utils/error.js:90:28)
      at new FirebaseMessagingError (/Users/aprilmintacpineda/projects/my-app/node_modules/firebase-admin/lib/utils/error.js:256:16)
      at Function.FirebaseMessagingError.fromServerError (/Users/aprilmintacpineda/projects/my-app/node_modules/firebase-admin/lib/utils/error.js:289:16)
      at /Users/aprilmintacpineda/projects/my-app/node_modules/firebase-admin/lib/messaging/messaging.js:105:63
      at Array.forEach (<anonymous>)
      at mapRawResponseToDevicesResponse (/Users/aprilmintacpineda/projects/my-app/node_modules/firebase-admin/lib/messaging/messaging.js:101:26)
      at /Users/aprilmintacpineda/projects/my-app/node_modules/firebase-admin/lib/messaging/messaging.js:370:24
      at processTicksAndRejections (node:internal/process/task_queues:94:5)
      at async isValidDeviceToken (/Users/aprilmintacpineda/projects/my-app/test.js:13:7) {
    errorInfo: {
      code: 'messaging/registration-token-not-registered',
      message: 'The provided registration token is not registered. A previously valid registration token can be unregistered for a variety of reasons. See the error documentation for more details. Remove this registration token and stop using it to send messages.'
    },
    codePrefix: 'messaging'
  }
}

Other episodes