Генерация токена для Firebase Cloud MessagingJavascript

Форум по Javascript
Ответить
Anonymous
 Генерация токена для Firebase Cloud Messaging

Сообщение Anonymous »

Я пытаюсь сгенерировать токен FCM, но в Chrome это не удается. Ниже приведен код, который все время зависает и никогда не выполняется, он сдается после нескольких повторных попыток, а затем не выполняется.
Что мне здесь не хватает?

Код: Выделить всё

async getTokenWithChromeDetection() {
try {
console.log('Getting FCM token...');
const isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
console.log('Browser is Chrome:', isChrome);
if (isChrome) {
console.log('Using Chrome workaround...');
// Chrome workaround: Try without any service worker manipulation
try {
console.log('Attempting Chrome direct method...');
const token = await Promise.race([
this.messaging.getToken({ vapidKey: this.vapidKey }),
new Promise((_, reject) =>
setTimeout(() => reject(new Error('Chrome direct timeout')), 25000)
)
]);
if (token) {
console.log('Chrome direct method succeeded');
return token;
}
} catch (directError) {
console.log('Chrome direct method failed:', directError.message);
}
// Chrome fallback: Clear everything and try again
console.log('Trying Chrome fallback method...');
try {
// Clear existing token
await this.messaging.deleteToken();
console.log('Cleared existing token');
// Wait a bit
await new Promise(resolve => setTimeout(resolve, 3000));
// Try again
const token = await Promise.race([
this.messaging.getToken({ vapidKey: this.vapidKey }),
new Promise((_, reject) =>
setTimeout(() => reject(new Error('Chrome fallback timeout')), 20000)
)
]);
if (token) {
console.log('Chrome fallback method succeeded');
return token;
}
} catch (fallbackError) {
console.log('Chrome fallback method failed:', fallbackError.message);
}
throw new Error('All Chrome methods failed');
} else {
// Standard method for non-Chrome browsers
console.log('Using standard method...');
const token = await Promise.race([
this.messaging.getToken({ vapidKey: this.vapidKey }),
new Promise((_, reject) =>
setTimeout(() => reject(new Error('Standard timeout')), 30000)
)
]);
return token;
}
} catch (error) {
console.error('Token retrieval failed:', error);
throw error;
}
}
Я не уверен, что пошло не так в приведенном выше коде, код работает в Firefox.
Я использую последние файлы Google FCM JS версии 12.4.

Подробнее здесь: https://stackoverflow.com/questions/797 ... -messaging
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»