У меня проблема, которую я пытался отладить в течение нескольких дней и потерял надежду. У меня есть мобильное приложение Ioni c с бэкэндом Firebase. Я пытаюсь написать чат Twilio. Я сейчас пытаюсь заставить его работать на iOS. Вот что я сделал до сих пор:
- Я создал ключ авторизации APN в учетной записи разработчика Apple. (Я также проверил это, используя сертификат APN)
- Я добавил ключ авторизации APN в консоль Firebase. (Я также проверил это, используя сертификат APN)
- Я проверил отправку уведомления pu sh с консоли Firebase, и мне удалось его успешно получить. пока никаких проблем.
- Затем я добавил секретный ключ FCM в Twilio.
- Настроил мое приложение Ioni c для получения токена FCM с использованием Ioni c Firebase SDK (https://github.com/dpa99c/cordova-plugin-firebasex). После получения токена FCM я передаю токен FCM Twilio.
- Настроил приложение Ioni c для обработки уведомления при получении уведомления.
- Попытка отправки сообщения чата. Уведомление не получено. Когда я открываю приложение, я вижу, что Firebase SDK правильно регистрирует уведомления.
Почему я не получаю уведомление, когда приложение не открыто? Лог c явно работает, потому что Firebase SDK действительно получает уведомление, когда я открываю приложение. Это также, похоже, не является проблемой с какими-либо настройками приложения, потому что я смог получить уведомление, когда приложение находится в фоновом режиме, при отправке уведомления непосредственно из Firebase.
Это мой внутренний код, который генерирует токен доступа Twilio:
// Twilio credentials and ids are defined here...
const chatGrant = new ChatGrant({
serviceSid: twilioServiceSid,
pushCredentialSid: credentialSid
});
const token = new AccessToken(twilioAccountSid, twilioApiKey, twilioApiSecret, {
identity: uid
});
token.addGrant(chatGrant);
return token.toJwt();
Это фрагмент моего кода Ioni c, который получает токен FCM с устройства и передает его Twilio
async getToken(): Promise<string> {
let token: string;
if (this.platform.is('ios')) {
const hasPermission = await this.firebaseNative.hasPermission();
if (!hasPermission) {
try {
await this.firebaseNative.grantPermission();
} catch (e) {
console.error('Error granting permission', e);
throw e;
}
}
try {
token = await this.firebaseNative.getToken();
} catch (e) {
console.error('Error getting FCM token', e);
throw e;
}
}
return token;
}
setPushRegistrationId(token: string) {
return this.twilioClient.setPushRegistrationId('fcm', token);
}
getToken().then(async (token) => {
console.log('fcm token: ' + token);
setPushRegistrationId(token)
.then(() => console.log('Added registration token'))
.catch(e => console.error('Error registering fcm token', e));
}).catch(e => {
console.error('Error getting FCM token', e);
console.error(e);
});
Пожалуйста, помогите! Спасибо 10