Уведомления о порхании / FCM не поступают в сборку Codemagic iOS

#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...."] }