Flutter Firebase getAPNSToken() возвращает нольIOS

Программируем под IOS
Ответить
Anonymous
 Flutter Firebase getAPNSToken() возвращает ноль

Сообщение Anonymous »

Я пытаюсь реализовать push-уведомления в своем приложении Flutter.
В iOS, если я вызываю FirebaseMessaging.instance.getToken(), я получаю сообщение об ошибке firebase_messaging/ apns-token-not-set, поэтому я звоню

Код: Выделить всё

FirebaseMessaging.instance.getAPNSToken()
но возвращает ноль на реальных устройствах.
Работает в симуляторе, но не на реальных устройствах
Все темы StackOverflow и все проблемы GitHub, которые я читал, говорят: Push-уведомления не работают в симуляторе iOS, используйте реальное устройство. Но для меня все наоборот:
В симуляторе iOS iPhone 15 я действительно получаю токен APNS, но на моем реальном устройстве, подключенном через кабель Lightning к на моем Mac и на том же устройстве, использующем приложение через Testflight, я не получаю токен APNS.
Код
Я использую следующий код для получения токена FCM. Код сейчас немного запутан из-за всей отладки, которую я провожу. Я добавил задержку в качестве второго шага на случай, если первый getAPNSToken() вернет значение null, потому что у некоторых это сработало, но не в моем случае.

Код: Выделить всё

Future initNotifications() async {
await FirebaseMessaging.instance.setAutoInitEnabled(true);

final permissionRequest = await FirebaseMessaging.instance.requestPermission(
alert: true,
announcement: false,
badge: true,
carPlay: false,
criticalAlert: false,
provisional: false,
sound: true,
);

if (permissionRequest.authorizationStatus == AuthorizationStatus.authorized) {
String? fcmToken;

if (Platform.isIOS) {
String? apnsToken = await FirebaseMessaging.instance.getAPNSToken();

if (apnsToken != null) {
debugPrint("APNS Token: $apnsToken");
fcmToken = await FirebaseMessaging.instance.getToken();
debugPrint("FCM Token: $fcmToken");
} else {
debugPrint("APNS Token not available, waiting ...");

await Future.delayed(
const Duration(
seconds: 3,
),
);

apnsToken = await FirebaseMessaging.instance.getAPNSToken();

if (apnsToken != null) {
debugPrint("APNS Token: $apnsToken");
fcmToken = await FirebaseMessaging.instance.getToken();
debugPrint("FCM Token: $fcmToken");
} else {
debugPrint("APNS Token not available, trying to get FCM token anyway ...");

try {
fcmToken = await FirebaseMessaging.instance.getToken();
} catch (err) {
debugPrint("FCM Token not available ($err)");
}
}
}

} else {
fcmToken = await FirebaseMessaging.instance.getToken();
debugPrint("FCM Token: $fcmToken");
}
} else {
debugPrint("Notifications not authorized");
}
}
Вышеуказанный метод вызывается в main.dart:

Код: Выделить всё

  WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
await FireBaseNotifications().initNotifications();
Xcode
В Xcode я включил:

Код: Выделить всё

- Push Notifications
- Background Modes:
- Background fetch
- Remote notifications
Консоль Firebase
В настройках проекта я добавил два сертификата APN (для разработки и производства).
pubspec.yaml
Я использую следующие пакеты Firebase:

Код: Выделить всё

  firebase_core: ^2.20.0
firebase_messaging: ^14.7.2
Я понятия не имею, почему я получаю токен APNS в симуляторе, но не на своем реальном устройстве.
Я не понимаю, чего мне не хватает.

Подробнее здесь: https://stackoverflow.com/questions/774 ... turns-null
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»