Разрешение на уведомление никогда не предоставляется в автономном приложении iOS - PullRequest
0 голосов
/ 09 июля 2019

Я исследовал и попробовал несколько вещей сейчас, но я просто не могу получить доступ к токену экспо, потому что разрешение якобы не было установлено. Все, что я нашел до сих пор, очень помогло мне, но в итоге это не было ответом.

Я должен сказать, что я абсолютный нуб Apple. Я знаю себя с системами Linux, но от устройств Apple, я мало что понимаю.

Я пишу приложение, которое должно уведомлять пользователей о получении почты или об изменениях на уровне базы данных. Пользователь не должен иметь возможность отправлять какие-либо уведомления, а только получать их. На Android все работало сразу, но как всегда это делает Apple тяжелее, чем нужно.

Спецификация требований:

Мой исходный код основан на примере Expo. Сборки автоматически генерируются в конце Expo.

Я пробовал это вручную некоторое время назад, но с этим у меня возникли трудности со всеми сертификатами и ключами от Apple. С сертификатами всегда возникали ошибки, поэтому в какой-то момент я это допустил. Я опубликую ошибку здесь позже, когда я попробую снова скоро. В настоящее время я все еще жду, когда экзамен Apple закончится.

Если я протестирую приложение в Expo до того, как скомпилирую, чтение токена expo работает нормально. Но как только сборка завершена, я не могу прочитать токен через TestFlight и само приложение. Статус все еще не определен.

Итак, я исследовал и заметил, что мне не хватает сертификатов. Теперь у меня есть Apple ID, сертификат распространения iOS, сертификат служб Apple Push и ключ push-уведомлений Expo. Также профиль обеспечения для того, что когда-либо мне это нужно. И несмотря на то, что я нажимаю «Разрешить» после установки, статус возвращается «неопределенный». Настройки iPhone также настроены так, что уведомления разрешены.

Затем я попробовал команду "expo build: ios --clear-push-cert". Тот же результат. Я обновил Node, NPM, Yarn и выставку. Все остальное, что я нашел, было не очень полезно для моего случая. У кого-нибудь есть идея, где моя ошибка?


new Promise(async (resolve, reject) => {
            const {status: existingStatus} = await Permissions.getAsync(Permissions.NOTIFICATIONS);
            let finalStatus = existingStatus;

            if (existingStatus !== 'granted') {

                const {status} = await Permissions.askAsync(Permissions.NOTIFICATIONS);
                finalStatus = status;
            }

            if ('granted' === finalStatus) {

                if ('android' === Platform.OS) {
                    Expo.Notifications.createChannelAndroidAsync('test-members', {
                        name: 'Mail Service',
                        sound: true,
                    });
                }

                const token = await Notifications.getExpoPushTokenAsync()
                token.then(resolve(token))
                    .catch(() =>
                        reject('Notifications allowed but there occurs an error at receiving the expo Token.'))

            } else {
                reject('Notifications not allowed')
            }
        }
    )

РЕДАКТИРОВАТЬ: Между тем я обнаружил, что я что-то неправильно понял с APNs и Push Notification Key и мне нужен только один из них. Но это будет только означать, что я вернулся в начале. Потому что у меня был только ключ, а не сертификат.

Если я хочу скомпилировать приложение вручную, в Expo всегда возникает проблема с поиском проекта для Apple ID. Так что я застрял.

Я сейчас переключился на SDK версии 33, но это не похоже на правильное решение. Потому что в iOS для устранения неполадок я прочитал следующее: «Примечание. В настоящее время push-уведомления недоступны для специальных клиентов, пока мы не завершим нашу работу по добавлению дополнительного уровня аутентификации в службу push-уведомлений Expo». Ad hoc автоматически выбирается, когда Expo компилирует приложение. Тем более что я бы не знал, что еще можно взять и как правильно его интегрировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...