electron-push-receiver: The service is currently unavailable

Hi @MatthieuLemoine Thank you for creating a great package. I tried to add in my project and have reference to the example project, can’t get the token failed to boot successfully, and get the error as below.


PUSH_RECEIVER:::Error while starting the service StatusCodeError: 503 - "{\n  \"error\": {\n    \"code\": 503,\n    \"message\": \"The service is currently unavailable.\",\n    \"status\": \"UNAVAILABLE\"\n  }\n}\n"
    at new StatusCodeError ($MYHOME/my-electron-app/node_modules/request-promise-core/lib/errors.js:32:15)
    at Request.plumbing.callback $MYHOME/my-electron-app/node_modules/request-promise-core/lib/plumbing.js:104:33)
    at Request.RP$callback [as _callback] ($MYHOME/my-electron-app/node_modules/request-promise-core/lib/plumbing.js:46:31)
    at Request.self.callback ($MYHOME/my-electron-app/node_modules/request/request.js:185:22)
    at Request.emit (events.js:315:20)
    at Request.<anonymous> ($MYHOME/my-electron-app/node_modules/request/request.js:1154:10)
    at Request.emit (events.js:315:20)
    at IncomingMessage.<anonymous> ($MYHOME/my-electron-app/node_modules/request/request.js:1076:12)
    at Object.onceWrapper (events.js:421:28)
    at IncomingMessage.emit (events.js:327:22)
    at endReadableNT (internal/streams/readable.js:1327:12)
    at processTicksAndRejections (internal/process/task_queues.js:80:21) {
  statusCode: 503,
  error: '{\n' +
    '  "error": {\n' +
    '    "code": 503,\n' +
    '    "message": "The service is currently unavailable.",\n' +
    '    "status": "UNAVAILABLE"\n' +
    '  }\n' +
    '}\n',
  options: {
    url: 'https://fcm.googleapis.com/fcm/connect/subscribe',
    method: 'POST',
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    form: {
      authorized_entity: '$MYSENDERID',
      endpoint: 'https://fcm.googleapis.com/fcm/send/...',
      encryption_key: '',
      encryption_auth: ''
    },
    callback: [Function: RP$callback],
    transform: undefined,
    simple: true,
    resolveWithFullResponse: false,
    transform2xxOnly: false
  },
  .....
  }

package.json
{
  "devDependencies": {
    "electron": "^13.1.4"
  },
  "dependencies": {
    "electron-push-receiver": "^2.1.3"
  }
}

It seems endpoint of FCM has changed, how to update again? Thank you very much!

About this issue

  • Original URL
  • State: open
  • Created 3 years ago
  • Reactions: 7
  • Comments: 20

Most upvoted comments

As mentioned here, we may no longer be able to invoke the FCM registration endpoint. https://github.com/MatthieuLemoine/push-receiver/issues/47#issuecomment-874251257

So, the possible (realistic) solution might be…using node-gyp, create a native addons for Google’s C++ SDK.

Or, migrate to another service, such as Pushy or something.

@osslate I believe all 3 implementations leverage native platform APIs for push messaging. Firebase SDK does not provide a push implementation, it provides a unified way to access platform provided APIs.

The C++ API, as noted in their docs, targets the platform services.

To write your cross-platform Firebase Cloud Messaging client app with C++, use the Firebase Cloud Messaging API. The C++ SDK works for both Android and iOS, with some additional setup required for each platform.

Same with the javascript implementation, that requires the browser to support it:

The FCM JavaScript API lets you receive notification messages in web apps running in browsers that support the Push API. This includes the browser versions listed in this support matrix and Chrome extensions via the Push API.

Basically, the Android implementation needs to be reverse engineered again. It is likely just new endpoints.

So, the possible (realistic) solution might be…using node-gyp, create a native addons for Google’s C++ SDK.

I’ve been looking into creating a native addon that links to firebase-cpp-sdk; it appears as though their SDK can be built for three different targets (Android, iOS, Desktop).

As you would expect, building for Android requires linking to Android/Java specific libraries, and building for iOS requires linking to iOS-specific libraries (Foundation, Cocoa, etc.)

Many of the Firebase API implementations in that SDK do appear to implement the desktop target, but unfortunately it appears Firebase Messaging doesn’t. Building Firebase Messaging with the desktop target results in this stub being compiled, rather than anything useful. (see the CMakeLists.txt here).

I’m going to explore this a little more tomorrow, but with the understanding I have, I can see two possible solutions:

  • use the Android/iOS implementations as a reference point to create a JS implementation. FlatBuffers is the library being used by the official SDK for data (de)serialization to/from Firebase Messaging, and there’s an official npm module for it, so that would save a lot of hassle.
  • implement a working implementation in C++ based on parts of the official SDK, but tied strictly to standard (or cross-platform) libraries. Firebase SDK is centered around the idea of an “app”, so more research would need to be done to see how coupled firebase-cpp-sdk/messaging is with firebase-cpp-sdk/app.

If anyone has been toying around with this idea or has better insight into this than I do (it’s been a while since I’ve played around with C++), I’d be interested to hear how far you’ve gotten 😃