Google 致力于为黑人社区推动种族平等。查看具体举措
Эта страница переведена с помощью Cloud Translation API.
Switch to English

Управление установками Firebase

Служба установки Firebase (FIS) предоставляет идентификатор установки Firebase (FID) для каждого установленного экземпляра приложения Firebase. Идентификатор установки Firebase используется внутренними службами Firebase, такими как обмен сообщениями в приложении или удаленная конфигурация, не требуя от разработчиков прямого взаимодействия с FIS API. Однако бывают случаи, когда разработчики приложений могут захотеть напрямую вызвать FIS API, например:

  • Чтобы удалить установку Firebase и данные, связанные с установкой.
  • Чтобы получить идентификаторы (идентификаторы установки Firebase), чтобы настроить таргетинг на определенные установки приложения.
  • Чтобы получить токены аутентификации установки для аутентификации установок Firebase.

Чтобы начать работу с прямым вызовом FIS API, добавьте SDK в свое приложение.

Добавьте в приложение SDK установки Firebase.

iOS

  1. Добавьте зависимость для установок Firebase в свой Podfile:
    pod 'Firebase/Installations'
  2. Запустите pod install и откройте созданный файл .xcworkspace .
  3. Импортируйте модуль Firebase в свой UIApplicationDelegate :

    Быстрый

    import Firebase

    Цель-C

    @import Firebase;
  4. Настройте общий экземпляр FirebaseApp , как правило, в методе application:didFinishLaunchingWithOptions: вашего приложения:

    Быстрый

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

    Цель-C

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

Android

Добавьте зависимость для Android SDK для установки Firebase в файл Gradle модуля (уровня приложения) (обычно app/build.gradle ):

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

JavaScript

В зависимости от того, как размещено ваше веб-приложение, ваша конфигурация может обрабатываться автоматически или вам может потребоваться обновить объект конфигурации Firebase .

Например, если ваши зависимости добавлены в index.html, добавьте зависимость в элемент <head>:

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

Удалить установку Firebase

Данные, связанные с установкой Firebase, обычно не идентифицируют личность. Тем не менее, может быть полезно дать пользователям возможность управлять этими данными и удалять их.

Идентификаторы установки Firebase различны для каждой установки каждого приложения; разные приложения на одном устройстве имеют разные идентификаторы установки Firebase. Идентификаторы установки Firebase идентифицируют установки приложений и данные, связанные с этими установками.

Когда вы удаляете идентификатор установки, данные, связанные с этим идентификатором установки, удаляются из действующих и резервных систем всех служб Firebase, которые используют идентификаторы установки Firebase для идентификации установок в течение 180 дней. Этот процесс подробно описан в заявлении Google об удалении и хранении .

Если вы не отключите все службы создания FID в своем приложении, FIS создаст новый идентификатор в течение нескольких дней. Firebase считает вновь созданный идентификатор новой установкой Firebase и никоим образом не связывает его с предыдущим идентификатором или данными.

Удалить FID с помощью вызова клиентского API

Чтобы удалить FID, созданные службами Firebase, вызовите соответствующий метод из SDK установки Firebase:

Быстрый

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

Цель-C

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

Ява

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");
        }
    }
});

Котлин + 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();

Удалить FID с помощью вызова API сервера

Чтобы удалить FID с помощью вызова API сервера, добавьте на свой сервер Firebase Admin SDK , если вы еще этого не сделали.

После добавления SDK удалите FID с помощью вызова функции удаления на выбранном вами языке (примечание: хотя эти методы отражают именование идентификаторов экземпляров, они фактически удаляют FID при вызове с любым текущим SDK Firebase).

Node.js

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

admin.instanceId().deleteInstanceId(idToDelete);

Ява

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

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

Python

  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)

Идти

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)
}

Когда вы удаляете идентификатор установки Firebase с помощью вызова API сервера, службы Firebase запускают процесс удаления данных, связанных с этим идентификатором установки, прекращают прием новых данных для этого идентификатора в течение 1-2 дней, а затем уведомляют клиентское приложение. что идентификатор был удален. Пока Firebase не уведомит клиентское приложение, некоторые службы приложения могут по-прежнему нацеливаться на идентификатор - например, установка Firebase может продолжать получать уведомления FCM в течение нескольких часов.

Если вы хотите удалить текущий идентификатор установки Firebase и немедленно использовать службы Firebase с новым, несвязанным идентификатором, используйте клиентский API для обработки удаления.

Получить идентификаторы клиентов

Если у вас есть требование идентифицировать определенные установки вашего приложения, вы можете сделать это, получив идентификатор установки Firebase. Например, чтобы выполнить тестирование во время разработки Firebase In-App Messaging, вы можете определить и настроить таргетинг на правильное тестовое устройство, используя его установочный идентификатор Firebase.

Чтобы получить идентификатор установки Firebase:

Быстрый

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)")
}

Цель-C

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

Ява

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");
        }
    }
});

Котлин + 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);

Получить токены аутентификации установки

Сервисы Firebase могут аутентифицировать установки Firebase с помощью токенов аутентификации, полученных из FIS. Например, при разработке A / B-тестов для Remote Config вы можете аутентифицировать целевое тестовое устройство с помощью установочного токена аутентификации.

Токен аутентификации установки - это недолговечный токен-носитель в формате веб-токена JSON (JWT), содержащий следующую информацию для установки:

  • Идентификатор установки Firebase
  • Связанный проект ( projectNumber )
  • Связанный идентификатор приложения Firebase ( appId )
  • Срок действия токена

Установочный токен аутентификации не может быть отозван и остается действительным до истечения срока его действия. Срок службы токена по умолчанию - одна неделя.

Чтобы получить токен аутентификации установки:

Быстрый

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

Цель-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]);
}];

Ява

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");
        }
    }
});

Котлин + 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);

Отслеживайте жизненный цикл идентификатора установки Firebase

Во время нормальной работы приложения идентификаторы установки Firebase (FID) не требуют особого контроля. Однако приложения, которые явно извлекают и используют FID, должны добавить логику для отслеживания потенциального удаления или ротации FID. Вот несколько случаев, когда FID могут быть удалены или повернуты:

  • Удаление или повторная установка приложения, например, когда конечный пользователь устанавливает на новое устройство.
  • Конечный пользователь очищает кеш приложения или устройства.
  • Удаление FID запускается в серверной части из-за неактивности приложения (в настоящее время порог для этого составляет 270 дней бездействия).

Когда в приложениях происходит ротация или удаление FID в таких случаях, им назначается новый FID. Кроме того, токен аутентификации установки, связанный с удаленным FID, удаляется независимо от его срока действия и заменяется новым токеном аутентификации установки.

Приложения могут отслеживать эти изменения и соответствующим образом реагировать.

Чтобы контролировать вращение ПИД:

Быстрый

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

Цель-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 с именем NSNotificationName.InstallationIDDidChange отправляется в NSNotificationCenter по умолчанию всякий раз, когда назначается новый FID.

Android

Клиенты Kotlin и Java должны добавить логику повтора для ответа на неудачные вызовы для получения нового FID.

JavaScript

Веб-приложения могут подписаться на onIdChange .

Каждый раз, когда создается новый FID, запускается обратный вызов с подпиской:

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

Переход с идентификатора экземпляра на установки Firebase

До внедрения установок Firebase Firebase полагалась на SDK идентификатора экземпляра для идентификаторов установок приложений. Установки Firebase обеспечивают значительные преимущества по сравнению с Instance ID в надежности, производительности и безопасности. Приложения Firebase, зависящие от SDK идентификатора экземпляра, должны перейти на установки Firebase.

Процесс миграции зависит от вашего приложения:

  • Приложения, которые не вызывают напрямую API идентификатора экземпляра, могут переноситься путем обновления своих версий SDK . Большинство приложений Firebase попадают в эту категорию.

  • Приложения, которые явно вызывают API-вызовы к идентификатору экземпляра, должны обновлять версии SDK и вносить изменения в код, чтобы заменить методы идентификатора экземпляра их установками Firebase или эквивалентами FCM. Если ваше приложение использует идентификатор экземпляра для получения токенов регистрации FCM или явно использует идентификатор экземпляра для нацеливания экземпляров приложения или для любых других целей, вам необходимо обновить код приложения.

В настоящее время FIS обратно совместим с устаревшим идентификатором Firebase Instance ID. Удаление IID - это альтернативный метод запроса удаления данных с помощью этих SDK Firebase:

  • iOS 6.14.0 и ниже
  • SDK для Android до 27 февраля 2020 г.

Это означает, что приложения не требуется переносить на установки Firebase; однако это настоятельно рекомендуется.

Обновление до минимальных версий SDK для установок Firebase

Чтобы перейти с идентификатора экземпляра на установки Firebase, убедитесь, что ваши приложения используют по крайней мере указанные минимальные номера версий следующих пакетов SDK Firebase:

Firebase SDK Минимальная версия Android Минимальная версия iOS
Обмен сообщениями Firebase Cloud Версия 20.3.0 v6.34.0
Удаленная конфигурация v19.2.0 v6.24.0
Google Analytics \ (SDK измерения) Версия 17.4.4 Версия 6.18.0
Обмен сообщениями в приложении v19.0.7 v6.24.0
Мониторинг производительности v19.0.8 v6.21.0
Crashlytics Версия 17.2.1 v6.23.0
Комплект ML Версия 22.1.2 Версия 6.28.0

Обновление кода, который явно вызывает API идентификатора экземпляра

Если ваше приложение для Android или iOS напрямую использует методы SDK идентификатора экземпляра, вы можете заменить это использование аналогичными альтернативами в SDK установки Firebase или FCM SDK.

Получение идентификатора

Методы получения идентификаторов экземпляров заменены методами получения идентификаторов установок. Например:

Перед

Быстрый

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)"
  }
}

Цель-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;
   }
 }];

Ява

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

Котлин + KTX

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

После

Быстрый

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)")
}

Цель-C

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

Ява

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");
        }
    }
});

Котлин + 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")
    }
}

Удаление идентификатора

Методы удаления идентификаторов экземпляров заменены методами удаления идентификаторов установки Firebase. Например:

Перед

Быстрый

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

Цель-C

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

Android

FirebaseInstanceId.deleteInstanceId();

После

Быстрый

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

Цель-C

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

Ява

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");
        }
    }
});

Котлин + KTX

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

Получение регистрационного токена FCM

До появления Firebase Installations клиенты FCM получали регистрационные токены из идентификатора экземпляра. Теперь FCM SDK предоставляет методы для получения регистрационного токена.

Перед

Ява

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();
            }
        });

Котлин + 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()
        })

Быстрый

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)"
  }
}

Цель-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;
   }
 }];

После

Ява

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();
        }
    });

Котлин + 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()
})

Быстрый

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)"
  }
}

Цель-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;
  }
}];