В 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");
}
}
Код: Выделить всё
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
await FireBaseNotifications().initNotifications();
В Xcode я включил:
Код: Выделить всё
- Push Notifications
- Background Modes:
- Background fetch
- Remote notifications
В настройках проекта я добавил два сертификата APN (для разработки и производства).
pubspec.yaml
Я использую следующие пакеты Firebase:
Код: Выделить всё
firebase_core: ^2.20.0
firebase_messaging: ^14.7.2
Я не понимаю, чего мне не хватает.
Подробнее здесь: https://stackoverflow.com/questions/774 ... turns-null
Мобильная версия