Я исследовал и попробовал несколько вещей сейчас, но я просто не могу получить доступ к токену экспо, потому что разрешение якобы не было установлено. Все, что я нашел до сих пор, очень помогло мне, но в итоге это не было ответом.
Я должен сказать, что я абсолютный нуб 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 компилирует приложение. Тем более что я бы не знал, что еще можно взять и как правильно его интегрировать.