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 можно использовать для манипуляции DOM (Document Object Model), что позволяет изменять содержимое и структуру веб-страницы.


312
2

Ответы:

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

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


Решено

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