#ios #flutter #push-notification #firebase-cloud-messaging #codemagic
#iOS #порхание #push-уведомление #firebase-облако-обмен сообщениями #codemagic
Вопрос:
Я пытаюсь создать приложение Flutter как для Android, так и для iOS. Я внедрял push-уведомления с помощью Firestore Cloud Messaging (FCM), и это работает как для Android, так и для iOS, когда я тестирую на симуляторе (Android) или на подключенном физическом устройстве (iOS).
Однако, когда я создаю приложение для тестирования клиентом (с использованием Codemagic), push-уведомления не работают на iOS (это работает на Android). Если это работает в моей среде разработки, но не в Codemagic, это означает, что все настроено правильно, кроме сборки Codemagic, верно??
Я не думаю, что в Codemagic требуется дополнительная настройка, помимо подключения учетной записи разработчика Apple. Но если бы я допустил ошибку при подключении учетной записи, то команда не отображалась бы, когда я создаю приложение, я полагаю.
Кроме того, когда я пытаюсь отправить push-уведомление через Postman, используя токен FCM, сгенерированный iphone, он возвращает «Не зарегистрирован«.
Так что я делаю не так?
Пожалуйста, любая помощь будет высоко оценена.
Спасибо.
Ответ №1:
Я бы попытался проверить профиль подготовки, который используется Codemagic во время сборки. Если вы уже пытались использовать автоматическую подпись кода в Codemagic и позже добавили FCM, возможно, вам придется удалить профиль подготовки, уже созданный Codemagic, чтобы заставить Codemagic создать новый с включенными push-уведомлениями (после их включения в возможностях xcode). В любом случае вы можете проверить созданный профиль на портале разработчиков Apple и проверить, включены ли push-уведомления для созданного профиля.
Комментарии:
1. Да, я проверил профиль и сертификат, сгенерированные Codemagic, и они были правильно настроены с помощью Push-уведомлений. Я установил Codemagic после настройки FCM и тестирования его в локальной среде (и успешно), так что, я думаю, это должно было сработать. Во всяком случае, я уже решил эту проблему с помощью Apple TestFlight… Если вы спросите меня, проблема должна быть в Codemagic, а не в моих конфигурациях. Но все равно спасибо!
Ответ №2:
Для iOS идентификатор приложения требует наличия сертификата производства и разработки. Если у него есть только сертификат разработки, он будет работать только в процессе разработки. Предоставляете ли вы заказчику сборку дистрибутива или сборку разработки?
Комментарии:
1. Спасибо, что ответили. Я даю ему разработку. Я также настроил профиль на разработку, поэтому я не думаю, что для этого мне нужен производственный сертификат, если я этого не сделаю?
2. Есть много вещей, которые нужно проверить. Дал ли пользователь iOS разрешение на получение push-уведомлений? Ознакомьтесь с документацией Apple Notification Documentation . Это даст вам идеи для проверки.
3. Вот еще одна ссылка, которая может помочь добавить push-уведомления в приложения iOS flutter .
4. Причина, по которой я не предоставил много информации, заключается в том, что уведомления работают в моей локальной среде (когда я запускаю flutter на своем физическом телефоне). Итак, я знаю, что FCM правильно подключен к APNs. Я просто не могу понять, почему это не работает со сборкой Codemagic. Но все равно спасибо за вашу помощь!
Ответ №3:
На случай, если у кого-то возникнет такая же проблема. Я решил эту проблему, просто отказавшись от использования Codemagic для развертывания iOS. Вместо этого я последовал этому руководству: https://flutter.dev/docs/deployment/ios и развернул сборку iOS на платформе Apple TestFlight.
Push-уведомления отлично работали на iOS после установки приложения оттуда.
Ответ №4:
Я немного опоздал, но, возможно, кто-то все еще сталкивается с этой проблемой и ищет решение. Я также не был зарегистрирован в каждом сообщении, которое я хотел отправить на свои устройства IOS. Моя проблема заключалась в том, что ключ FCM IOS, который я создавал, был ключом песочницы. APNS использует два сервера для push-уведомлений — SandBox и Production. Когда вы создаете отладочную версию приложения на устройстве iOS во время разработки, оно подключается к серверу изолированной среды и извлекает из него токен. Как только вы создадите релизную сборку приложения, оно подключится к производственному серверу. Если вы тестируете приложение с помощью debug build, то для тестирования уведомлений вам необходимо убедиться, что вы тестируете его через песочницу. После получения токена вы можете использовать приведенный ниже API Google для преобразования токена APNS в токен FCM:
HTTP POST : https://iid.googleapis.com/iid/v1:batchImport HTTP HEADERS: Content-Type: application/json Authorization : key=YOUR_SERVER_KEY
Тело : { "application": "com.company.app", (YOUR_APP_PACKAGE) "sandbox":true, "apns_tokens":["7c6811bfa1e89c739c5862122aa7ab68fc4972dea7372242f74276a5326f...."] }