PHONE_REGISTRATION_ERROR/UNIMLEMENTED Ошибка GCM на устройстве, использующем JavaScript

Мы используем устройства с ОС Linux и включенным JavaScript (с использованием node.js). Мы используем Google FCM для получения уведомлений. Мы используем библиотеку javascript (здесь добавлена ​​функция Register()), чтобы получить токен fcm путем передачи идентификатора отправителя. Все работало нормально. Но за последние несколько дней мы получаем сообщение PHONE_REGISTRATION_ERROR и ошибку UNIMPLEMENTED/UNIMLEMENTED при попытке получить токен FCM.

Ниже приведен фрагмент кода.


(async () => {                                                                                           
  try {                                                                                                                        
    const credentials = await register(senderID);
    const token = credentials.fcm.token;                                                                                                                                                               
    const persistentIds = [];
    await listen({ ...credentials, persistentIds }, onNotification);                                   
  } catch (e) {                                                                                                                                
    console.info("Error::" + e);                                                                                                                
  }                                                                                                                                            
})();

Ниже приведен код функции регистрации.

const uuidv4 = require('uuid/v4');
const { register: registerGCM } = require('../gcm');
const registerFCM = require('../fcm');

module.exports = register;

async function register(senderId) {
  // Should be unique by app - One GCM registration/token by app/appId
  const appId = `wp:receiver.push.com#${uuidv4()}`;
  const subscription = await registerGCM(appId);
  const result = await registerFCM({
    token : subscription.token,
    senderId,
    appId,
  });
  // Need to be saved by the client
  return Object.assign({}, result, { gcm : subscription });
}

За последние несколько дней мы получили ошибку PHONE_REGISTRATION_ERROR и UNIMPLEMENTED, как показано ниже.

Register request has failed with Error=PHONE_REGISTRATION_ERROR
Retry... 1
Error::StatusCodeError: 501 - "{\n  \"error\": {\n    \"code\": 501,\n    \"message\": \"Operation is not implemented, or supported, or enabled.\",\n    \"status\": \"UNIMPLEMENTED\"\n  }\n}\n"

Или иногда возникает НЕОПРЕДЕЛЕННАЯ ошибка и невозможно получить токен. Я пытался перезагрузить устройства несколько раз, но безрезультатно.

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

Что это за «библиотека Javascript», о которой вы говорите? Что такое register и listen? Эффективно ли работает этот код JavaScript в браузере или в какой-либо другой среде, например nodejs? Пожалуйста, отредактируйте вопрос, чтобы показать достаточно информации, которую кто-то мог бы использовать для воспроизведения проблемы.

Doug Stevenson 21.08.2024 01:46

Обновлен код функции регистрации.

kadina 21.08.2024 02:14

Что такое const { register: registerGCM } = require('../gcm'); и const registerFCM = require('../fcm');?

Doug Stevenson 21.08.2024 02:29

Я также отмечу, что FCM изначально не поддерживает nodejs для получения сообщений (только браузеры, Android и iOS). Вы делаете здесь что-то, выходящее за рамки того, что явно разрешает Google, и это неясно.

Doug Stevenson 21.08.2024 02:31

Хорошо. Чтобы внести ясность, мы используем эту библиотеку github.com/MatthieuLemoine/push-receiver/blob/…. Это была единственная библиотека, которую мы включили для поддержки уведомлений. Я не уверен, почему он внезапно перестает работать без каких-либо изменений.

kadina 21.08.2024 04:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
312
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У меня та же проблема. Я использую ту же библиотеку в своем приложении Electron.

На устройствах, которые уже успешно получили токен FCM, все работает нормально. Но новые устройства не могут получить новый токен FCM. Они получают ту же ошибку, что упомянута в сообщении OG.

@rixicon: Надеюсь, ответ решит вашу проблему.

kadina 26.08.2024 16:14
Ответ принят как подходящий

Push-приемник библиотеки javascript использует устаревшие API Firebase. FB прекратил поддержку этих API, что и стало причиной сбоя. Мы изменили наш код, чтобы использовать библиотеку push-receiver-v2, что устранило проблему.

Другие вопросы по теме