Возможный обходной путь, если вы используете firebase, должен выглядеть следующим образом:
Вам необходимо хранить каждый токен firemase FCM для конкретного пользователя (необходимо учитывать, что пользователь может одновременно войти в систему).на его аккаунте с нескольких устройств), чтобы вы могли хранить userId и его deviceUniqueId на флаттере, вы можете получить его из device_info https://pub.dev/packages/device_info:
String identifier;
final DeviceInfoPlugin deviceInfoPlugin = new DeviceInfoPlugin();
try {
if (Platform.isAndroid) {
var build = await deviceInfoPlugin.androidInfo;
identifier = build.id.toString();
} else if (Platform.isIOS) {
var data = await deviceInfoPlugin.iosInfo;
identifier = data.identifierForVendor;//UUID for iOS
}
} on PlatformException {
print('Failed to get platform version');
}
и послечтобы получить уникальный токен CFM, предоставляемый Firebase для каждого устройства, вы можете получить его с помощью плагина Firebase firebase_messaging (https://pub.dev/packages/firebase_messaging) getToken () и вставить токен в firestore (или другую базу данных, которую вы используете).хотите сохранить его)
FirebaseMessaging firebaseMessaging = new FirebaseMessaging();
firebaseMessaging.requestNotificationPermissions(
const IosNotificationSettings(sound: true, badge: true, alert: true));
firebaseMessaging.onIosSettingsRegistered
.listen((IosNotificationSettings settings) {
print("Settings registered: $settings");
});
firebaseMessaging.getToken().then((token){
print('--- Firebase toke here ---');
Firestore.instance.collection(constant.userID).document(identifier).setData({ 'token': token});
print(token);
});
После этого вы можете вставить один или несколько токенов FCM, подключенных к нескольким устройствам для одного пользователя. 1 пользователь ... n устройств, 1 устройство ... 1 уникальный токен для полученияpush-уведомления от Firebase.
отправляйте его автоматически, когда появляется новое сообщение для человека : теперь вам нужно вызвать API Firestore (действительно очень быстроно нужно быть осторожным в отношении лимита плана, который вы используете здесь) или другого вызова API, если вы храните токен в другой базе данных, чтобы получить токен / токены для каждого пользователя и отправить push-уведомления.
Для отправки push-уведомления из флаттера вы можете использовать асинхронную функцию Future.PS: Я передаю в качестве аргумента список здесь, чтобы использовать "registration_ids" вместо "to" и отправить push-уведомление на несколько токенов, если пользователь вошел в системуна нескольких устройствах.
Future<bool> callOnFcmApiSendPushNotifications(List <String> userToken) async {
final postUrl = 'https://fcm.googleapis.com/fcm/send';
final data = {
"registration_ids" : userToken,
"collapse_key" : "type_a",
"notification" : {
"title": 'NewTextTitle'
"body" : 'NewTextBody',
}
};
final headers = {
'content-type': 'application/json',
'Authorization': constant.firebaseTokenAPIFCM
};
final response = await http.post(postUrl,
body: json.encode(data),
encoding: Encoding.getByName('utf-8'),
headers: headers);
if (response.statusCode == 200) {
// on success do sth
print('test ok push CFM');
return true;
} else {
print(' CFM error');
// on failure do sth
return false;
}
}
Вы также можете проверить почтовый звонок от почтальона, чтобы провести несколько тестов.POST-запрос На заголовки добавьте:
- ключ Авторизация с значением ключ = AAAAO ........ // Обзор проекта -> ОблакоОбмен сообщениями -> Ключ сервера
- ключ Тип содержимого с значением application / json
А на теле добавьте
{
"registration_ids" :[ "userUniqueToken1", "userUniqueToken2",... ],
"collapse_key" : "type_a",
"notification" : {
"body" : "Test post",
"title": "Push notifications E"
}
}
"registration_ids" для отправки его на несколько токенов (один и тот же пользователь вошел в систему более чем на устройство одновременно) "to" для отправки его наодин токен (одно устройство на пользователя / или всегда обновляет токен пользователя, который связан с его устройством и имеет 1 токен ... 1 пользователь)