Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Zarządzaj instalacjami Firebase

Usługa instalacji Firebase (FIS) udostępnia identyfikator instalacji Firebase (FID) dla każdego zainstalowanego wystąpienia aplikacji Firebase. Identyfikator instalacji Firebase jest używany wewnętrznie przez usługi Firebase, takie jak Komunikacja w aplikacji lub Zdalna konfiguracja, bez konieczności bezpośredniego współdziałania programistów z interfejsem API FIS. Istnieją jednak przypadki, w których programiści aplikacji mogą chcieć bezpośrednio wywołać interfejs API FIS, na przykład:

  • Aby usunąć instalację Firebase i powiązane z nią dane.
  • Aby pobrać identyfikatory (identyfikatory instalacji Firebase) w celu kierowania na określone instalacje aplikacji.
  • Aby pobrać tokeny uwierzytelniania instalacji w celu uwierzytelnienia instalacji Firebase.

Aby rozpocząć bezpośrednie wywoływanie interfejsu API FIS, dodaj pakiet SDK do swojej aplikacji.

Dodaj pakiet SDK instalacji Firebase do swojej aplikacji

iOS

  1. Dodaj zależność dla instalacji Firebase do swojej Podfile:
    pod 'Firebase/Installations'
  2. Run pod install i otworzyć utworzony .xcworkspace pliku.
  3. Zaimportować moduł Firebase w UIApplicationDelegate :

    Szybki

    import Firebase

    Cel C

    @import Firebase;
  4. Skonfiguruj FirebaseApp wspólne wystąpienie, zazwyczaj w swojej aplikacji application:didFinishLaunchingWithOptions: metodę:

    Szybki

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Cel C

    // Use Firebase library to configure APIs
    [FIRApp configure];

Android

Dodaj zależność dla instalacji Firebase Android SDK do modułu (ok szczebla) Gradle plików (zwykle app/build.gradle ):

implementation 'com.google.firebase:firebase-installations:17.0.0'

JavaScript

W zależności od sposobu aplikacji internetowych jest gospodarzem, konfiguracja może być obsługiwane automatycznie lub być może trzeba zaktualizować Firebase obiektu konfiguracji .

Na przykład, jeśli twoje zależności są dodane w index.html, dodaj zależność w elemencie <head>:

<script src="/__/firebase/9.1.3/firebase-installations.js"></script>

Usuń instalację Firebase

Dane związane z instalacją Firebase nie jest na ogół osobiście identyfikacji. Mimo to warto dać użytkownikom możliwość zarządzania tymi danymi i ich usuwania.

Identyfikatory instalacji Firebase są różne dla każdej instalacji każdej aplikacji; różne aplikacje na tym samym urządzeniu mają różne identyfikatory instalacji Firebase. Identyfikatory instalacji Firebase identyfikują instalacje aplikacji i dane powiązane z tymi instalacjami aplikacji.

Po usunięciu identyfikatora instalacji dane powiązane z tym identyfikatorem instalacji są usuwane z systemów działających i systemów kopii zapasowych wszystkich usług Firebase, które używają identyfikatorów instalacji Firebase do identyfikowania instalacji w ciągu 180 dni. Proces ten opisany jest na wysokim poziomie w Google oświadczenie w sprawie skreślenia i retencji .

O ile nie wyłączysz wszystkich usług generujących identyfikatory FID w swojej aplikacji, FIS utworzy nowy identyfikator w ciągu kilku dni. Firebase traktuje nowo utworzony identyfikator jako nową instalację Firebase i nie łączy go w żaden sposób z poprzednim identyfikatorem ani danymi.

Usuń FID za pomocą wywołania API klienta

Aby usunąć identyfikatory FID wygenerowane przez usługi Firebase, wywołaj odpowiednią metodę z pakietu SDK instalacji Firebase:

Szybki

Installations.installations().delete { error in
  if let error = error {
    print("Error deleting installation: \(error)")
    return
  }
  print("Installation deleted");
}

Cel C

[[FIRInstallations installations] deleteWithCompletion:^(NSError *error) {
   if (error != nil) {
     NSLog(@"Error deleting Installation %@", error);
     return;
   }
   NSLog(@"Installation deleted");
}];

Jawa

FirebaseInstallations.getInstance().delete()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation deleted");
        } else {
            Log.e("Installations", "Unable to delete Installation");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().delete().addOnCompleteListener { task ->
    if (task.isComplete) {
        Log.d("Installations", "Installation deleted")
    }  else {
        Log.e("Installations", "Unable to delete Installation")
    }
}

JavaScript

await firebase.installations().delete();

Usuń FID za pomocą wywołania API serwera

Aby usunąć FID za pomocą wywołania API serwera dodać Firebase Admin SDK do serwera , jeśli nie masz.

Po dodaniu pakietu SDK usuń identyfikatory FID za pomocą wywołania funkcji usuwania w wybranym języku (uwaga: z wyjątkiem Node.js te metody odzwierciedlają nazewnictwo identyfikatorów instancji. Jednak wszystkie faktycznie usuwają identyfikatory FID, gdy są wywoływane z dowolną bieżącą wersją Firebase SDK).

Node.js

// An FIDsent from a client service SDK
const idToDelete = 'eyJhbGciOiJFUzI1N_iIs5';

admin.installations().deleteInstallation(idToDelete);

Jawa

// An FID sent from a client service SDK
String idToDelete = "eyJhbGciOiJFUzI1N_iIs5";

FirebaseInstanceId.getInstance().deleteInstanceIdAsync(idToDelete).get();

Pyton

  from firebase_admin import instance_id

  # An FID sent from a client service SDK
  id_to_delete = 'eyJhbGciOiJFUzI1N_iIs5'

  instance_id.delete_instance_id(id_to_delete)

Udać się

client, err := app.InstanceId(ctx)
if err != nil {
  log.Fatalln("error initializing client", err)
}

iidToDelete := "eyJhbGciOiJFUzI1N_iIs5"
if err := client.DeleteInstanceId(ctx, iidToDelete); err != nil {
  log.Fatalln("error deleting FID", err)
}

Po usunięciu identyfikatora instalacji Firebase za pomocą wywołania interfejsu API serwera usługi Firebase rozpoczynają proces usuwania danych powiązanych z tym identyfikatorem instalacji, przestają akceptować nowe dane dla tego identyfikatora w ciągu 1-2 dni, a następnie powiadamiają aplikację kliencką że identyfikator został usunięty. Dopóki Firebase nie powiadomi aplikacji klienckiej, niektóre usługi aplikacji mogą nadal kierować na identyfikator — na przykład instalacja Firebase może nadal otrzymywać powiadomienia FCM przez kilka godzin.

Jeśli chcesz usunąć bieżący identyfikator instalacji Firebase i od razu korzystać z usług Firebase z nowym, niepowiązanym identyfikatorem, do obsługi usunięcia użyj interfejsu API klienta.

Pobierz identyfikatory klientów

Jeśli musisz zidentyfikować konkretne instalacje swojej aplikacji, możesz to zrobić, pobierając identyfikator instalacji Firebase. Na przykład, aby przeprowadzić testy podczas tworzenia funkcji Firebase Wysyłanie wiadomości w aplikacji, możesz zidentyfikować i wybrać odpowiednie urządzenie testowe, korzystając z jego identyfikatora instalacji Firebase.

Aby pobrać identyfikator instalacji Firebase:

Szybki

Installations.installations().installationID { (id, error) in
  if let error = error {
    print("Error fetching id: \(error)")
    return
  }
  guard let id = id else { return }
  print("Installation ID: \(id)")
}

Cel C

[[FIRInstallations installations] installationIDWithCompletion:^(NSString *identifier, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation ID %@", error);
    return;
  }
  NSLog(@"Installation ID: %@", identifier);
}];

Jawa

FirebaseInstallations.getInstance().getId()
        .addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation ID: " + task.getResult());
        } else {
            Log.e("Installations", "Unable to get Installation ID");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        Log.d("Installations", "Installation ID: " + task.result)
    } else {
        Log.e("Installations", "Unable to get Installation ID")
    }
}

JavaScript

const installationId = await firebase.installations().getId();
console.log(installationId);

Pobierz tokeny uwierzytelniania instalacji

Usługi Firebase mogą uwierzytelniać instalacje Firebase za pomocą tokenów uwierzytelniania pobranych z FIS. Na przykład podczas projektowania testów A/B dla Zdalnej konfiguracji można uwierzytelnić docelowe urządzenie testowe za pomocą tokenu uwierzytelniania instalacji.

Token uwierzytelniania instalacji to krótkotrwały token okaziciela w formacie JSON web token (JWT) zawierający następujące informacje dotyczące instalacji:

  • Identyfikator instalacji Firebase
  • Powiązany projekt ( projectNumber )
  • Firebase skojarzony identyfikator aplikacji ( appId )
  • Data ważności tokena

Token uwierzytelniania instalacji nie może zostać unieważniony i pozostaje ważny do daty wygaśnięcia. Domyślny okres istnienia tokena to jeden tydzień.

Aby pobrać token uwierzytelniania instalacji:

Szybki

Installations.installations().authTokenForcingRefresh(true, completion: { (result, error) in
  if let error = error {
    print("Error fetching token: \(error)")
    return
  }
  guard let result = result else { return }
  print("Installation auth token: \(result.authToken)")
})

Cel C

[[FIRInstallations installations] authTokenForcingRefresh:true
                                               completion:^(FIRInstallationsAuthTokenResult *result, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation token %@", error);
    return;
  }
  NSLog(@"Installation auth token: %@", [result authToken]);
}];

Jawa

FirebaseInstallations.getInstance().getToken(/* forceRefresh */true)
        .addOnCompleteListener(new OnCompleteListener<InstallationTokenResult>() {
    @Override
    public void onComplete(@NonNull Task<InstallationTokenResult> task) {
        if (task.isSuccessful() && task.getResult() != null) {
            Log.d("Installations", "Installation auth token: " + task.getResult().getToken());
        } else {
            Log.e("Installations", "Unable to get Installation auth token");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().getToken(/* forceRefresh */ true)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d("Installations", "Installation auth token: " + task.result?.token)
        } else {
            Log.e("Installations", "Unable to get Installation auth token")
        }
    }

JavaScript

const installationToken = await firebase.installations()
    .getToken(/* forceRefresh */ true);
console.log(installationToken);

Monitoruj cykl życia identyfikatora instalacji Firebase

Podczas normalnego działania aplikacji identyfikatory instalacji Firebase (FID) nie wymagają specjalnego monitorowania. Jednak aplikacje, które w sposób jawny pobierają i używają FID, powinny dodać logikę do monitorowania potencjalnego usunięcia lub rotacji FID. Oto kilka przypadków, w których identyfikatory FID mogą zostać usunięte lub poddane rotacji:

  • Odinstalowywanie lub ponowna instalacja aplikacji, na przykład gdy użytkownik końcowy instaluje na nowym urządzeniu.
  • Użytkownik końcowy czyści pamięć podręczną aplikacji lub urządzenia.
  • Usuwanie FID jest wyzwalane w backendzie z powodu braku aktywności aplikacji (obecnie próg to 270 dni braku aktywności).

Gdy w tego typu przypadkach aplikacje doświadczają rotacji lub usuwania identyfikatorów FID, są im przypisywane nowe identyfikatory FID. Ponadto token uwierzytelniania instalacji skojarzony z usuniętym identyfikatorem FID jest usuwany, niezależnie od jego własnej dojrzałości, i zastępowany nowym tokenem uwierzytelniania instalacji.

Aplikacje mogą monitorować te zmiany i odpowiednio reagować.

Aby monitorować rotację FID:

Szybki

installationIDObserver = NotificationCenter.default.addObserver(
        forName: .InstallationIDDidChange,
        object: nil,
        queue: nil
) { (notification) in
  // Fetch new Installation ID
  self.fetchInstallationToken()
}

Cel C

__weak __auto_type weakSelf = self;
self.installationIDObserver = [[NSNotificationCenter defaultCenter]
        addObserverForName: FIRInstallationIDDidChangeNotification
                    object:nil
                     queue:nil
                usingBlock:^(NSNotification * _Nonnull notification) {
    // Fetch new Installation ID
    [weakSelf fetchInstallationsID];
}];

NSNotification nazwie NSNotificationName.InstallationIDDidChange zostaje wysłana do domyślnego NSNotificationCenter ilekroć jest przypisany nowy FID.

Android

Klienci Kotlin i Java powinni dodać logikę ponawiania, aby odpowiedzieć na nieudane połączenia w celu pobrania nowego FID.

JavaScript

Aplikacje internetowe mogą subskrybować onIdChange haka.

Za każdym razem, gdy tworzony jest nowy FID, wyzwalane jest wywołanie zwrotne subskrybowanego:

await firebase.installations().onIdChange((newId) => {
  console.log(newId);
  // TODO: Handle new installation ID.
});

Migracja z Instancji ID do instalacji Firebase

Przed wprowadzeniem instalacji Firebase firma Firebase korzystała z pakietu SDK identyfikatorów instancji do identyfikacji instalacji aplikacji. Instalacje Firebase zapewniają znaczną przewagę nad Instance ID pod względem niezawodności, wydajności i bezpieczeństwa. Aplikacje Firebase zależne od pakietu SDK identyfikatora instancji należy migrować do instalacji Firebase.

Proces migracji różni się w zależności od Twojej aplikacji:

  • Aplikacje, które nie bezpośrednio wywołać Instancji API ID może migrować przez aktualizację ich wersji SDK . Większość aplikacji Firebase należy do tej kategorii.

  • Aplikacje, które wyraźnie nawiązywać połączenia API do Instance ID musi zaktualizować wersje SDK i zmiany kodu make zastąpić metody id instancji ze swoich instalacji Firebase lub ekwiwalentów FCM. Jeśli Twoja aplikacja używa identyfikatora wystąpienia do pobierania tokenów rejestracji FCM lub jawnie używa identyfikatora wystąpienia do kierowania na wystąpienia aplikacji lub w jakimkolwiek innym celu, musisz zaktualizować kod aplikacji.

Obecnie FIS jest zgodny z poprzednimi wersjami identyfikatora Firebase Instance ID. Usuwanie IID to alternatywna metoda żądania usunięcia danych z tych Firebase SDK:

  • iOS 6.14.0 i starsze
  • Android SDK przed 27 lutego 2020 r.

Oznacza to, że aplikacje nie są wymagane do migracji do instalacji Firebase; jednak jest to wysoce zalecane.

Uaktualnianie do minimalnych wersji SDK dla instalacji Firebase

Aby przeprowadzić migrację z instalacji z identyfikatorem instancji do instalacji Firebase, upewnij się, że aplikacje korzystają z co najmniej podanych minimalnych numerów wersji następujących pakietów SDK Firebase:

Pakiet Firebase SDK Minimalna wersja Androida Minimalna wersja iOS
Wiadomości w chmurze Firebase v20.3.0 v6.34.0
Zdalna konfiguracja v19.2.0 v6.24.0
Google Analytics \ (pakiet SDK do pomiarów) v17.4.4 v6.18.0
Wiadomości w aplikacji v19.0.7 v6.24.0
Monitoring wydajności v19.0.8 v6.21.0
Crashlytics v17.2.1 v6.23.0
Zestaw ML v22.1.2 v6.28.0

Aktualizowanie kodu, który jawnie wywołuje interfejsy API identyfikatorów instancji

Jeśli Twoja aplikacja na Androida lub iOS bezpośrednio korzysta z metod pakietu SDK identyfikatora instancji, możesz zastąpić to użycie identycznymi alternatywami w pakiecie SDK instalacji Firebase lub pakiecie FCM SDK.

Pobieranie identyfikatora

Metody uzyskiwania identyfikatorów instancji są zastępowane metodami uzyskiwania identyfikatorów instalacji. Na przykład:

Przed

Szybki

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching remote FCM registration token: \(error)")
  } else if let token = token {
    print("Remote instance ID token: \(token)")
    self.remoteFCMTokenMessage.text = "Remote FCM registration token: \(token)"
  }
}

Cel C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) {
   if (error != nil) {
     NSLog(@"Error fetching the remote FCM registration token: %@", error);
   } else {
     NSLog(@"Remote FCM registration token: %@", token);
     NSString* message =
       [NSString stringWithFormat:@"FCM registration token: %@", token];
     self.remoteFCMTokenMessage.text = message;
   }
 }];

Jawa

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                Log.d("IID_TOKEN", task.getResult().getToken());
            }
        });

Kotlin+KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnSuccessListener { result ->
            Log.d("IID_TOKEN", result.token)
        }

Później

Szybki

Installations.installations().installationID { (id, error) in
  if let error = error {
    print("Error fetching id: \(error)")
    return
  }
  guard let id = id else { return }
  print("Installation ID: \(id)")
}

Cel C

[[FIRInstallations installations] installationIDWithCompletion:^(NSString *identifier, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation ID %@", error);
    return;
  }
  NSLog(@"Installation ID: %@", identifier);
}];

Jawa

FirebaseInstallations.getInstance().getId()
        .addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation ID: " + task.getResult());
        } else {
            Log.e("Installations", "Unable to get Installation ID");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        Log.d("Installations", "Installation ID: " + task.result)
    } else {
        Log.e("Installations", "Unable to get Installation ID")
    }
}

Usuwanie identyfikatora

Metody usuwania identyfikatorów instancji są zastępowane metodami usuwania identyfikatorów instalacji Firebase. Na przykład:

Przed

Szybki

InstanceID.instanceID().deleteID { error in
  if let error = error {
    print("Error deleting instance ID: \(error)")
  }
}

Cel C

[FIRInstanceID instanceID] deleteIDWithHandler:^(NSError *error) {
  if error != nil {
    NSLog(@"Error deleting instance ID: %@", error);
  }
}];

Android

FirebaseInstanceId.deleteInstanceId();

Później

Szybki

func delete(completion: @escaping (Error?) -> Void)

Cel C

- (void)deleteWithCompletion:(nonnull void (^)(NSError *_Nullable))completion;

Jawa

FirebaseInstallations.getInstance().delete()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation deleted");
        } else {
            Log.e("Installations", "Unable to delete Installation");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().delete().addOnCompleteListener { task ->
    if (task.isComplete) {
        Log.d("Installations", "Installation deleted")
    }  else {
        Log.e("Installations", "Unable to delete Installation")
    }
}

Pobieranie tokena rejestracji FCM

Przed wprowadzeniem instalacji Firebase klienci FCM pobierali tokeny rejestracji z identyfikatora instancji. Teraz zestaw SDK FCM udostępnia metody pobierania tokenu rejestracji.

Przed

Jawa

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                if (!task.isSuccessful()) {
                    Log.w(TAG, "getInstanceId failed", task.getException());
                    return;
                }

                // Get new Instance ID token
                String token = task.getResult().getToken();

                // Log and toast
                String msg = getString(R.string.msg_token_fmt, token);
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

Kotlin+KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w(TAG, "getInstanceId failed", task.exception)
                return@OnCompleteListener
            }

            // Get new Instance ID token
            val token = task.result?.token

            // Log and toast
            val msg = getString(R.string.msg_token_fmt, token)
            Log.d(TAG, msg)
            Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
        })

Szybki

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching remote FCM registration token: \(error)")
  } else if let token = token {
    print("Remote instance ID token: \(token)")
    self.remoteFCMTokenMessage.text = "Remote FCM registration token: \(token)"
  }
}

Cel C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) {
   if (error != nil) {
     NSLog(@"Error fetching the remote FCM registration token: %@", error);
   } else {
     NSLog(@"Remote FCM registration token: %@", token);
     NSString* message =
       [NSString stringWithFormat:@"FCM registration token: %@", token];
     self.remoteFCMTokenMessage.text = message;
   }
 }];

Później

Jawa

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // Log and toast
          String msg = getString(R.string.msg_token_fmt, token);
          Log.d(TAG, msg);
          Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

Kotlin+KTX

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // Log and toast
    val msg = getString(R.string.msg_token_fmt, token)
    Log.d(TAG, msg)
    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
})

Szybki

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching FCM registration token: \(error)")
  } else if let token = token {
    print("FCM registration token: \(token)")
    self.fcmRegTokenMessage.text  = "Remote FCM registration token: \(token)"
  }
}

Cel C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) {
  if (error != nil) {
    NSLog(@"Error getting FCM registration token: %@", error);
  } else {
    NSLog(@"FCM registration token: %@", token);
    self.fcmRegTokenMessage.text = token;
  }
}];