Giter Site home page Giter Site logo

parse-community / node-apn Goto Github PK

View Code? Open in Web Editor NEW

This project forked from node-apn/node-apn

165.0 165.0 58.0 1.68 MB

Apple Push Notification module for Node.js

License: Other

JavaScript 99.10% Handlebars 0.90%
nodejs parse-server push-notifications

node-apn's People

Contributors

acinader avatar alappe avatar alexanderedge avatar anthonyringoet avatar argon avatar artyomxyz avatar b-marques avatar benagin avatar bobrik avatar cmdkoh avatar davimacedo avatar dependabot[bot] avatar dplewis avatar eladnava avatar florianreinhart avatar funkenstrahlen avatar isayme avatar jfbai avatar kinolaev avatar linusu avatar mralek avatar mtrezza avatar nsabovic avatar sandfox avatar semantic-release-bot avatar snyk-bot avatar trevorah avatar tysonandre avatar wertlex avatar williambelle avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

node-apn's Issues

Notification successfully sent but not received

I am facing an issue using this package

The notification is successfully sent to the given device token by your package but not receiving notification on the device is there any delay problem or anything else

I have provided my code Please help me to solve this problem as soon as possible

Looking forward to hearing from you guys
Thanks

Screenshot 2022-07-07 at 3 59 15 PM

Screenshot 2022-07-07 at 3 59 35 PM

VError: apn write timeout on errors

I've been playing around with the library and it seems like the HTTP stream never gets the on('end') event when there's a error response from APNs, i.e. 400 Missing Device Token and would just give a timeout error.

With a debugger I was able to see the errors be correctly received in the headers and the response
https://github.com/parse-community/node-apn/blob/master/lib/client.js#L150

But afterwards it nevers goes into the request.on('end') part:
https://github.com/parse-community/node-apn/blob/master/lib/client.js#L161

It only goes into the timeout handler:
https://github.com/parse-community/node-apn/blob/master/lib/client.js#L207

I've did the same test in the official node-apn package and it was returning error states correctly.

aps property on Notification is being set to undefined

I am not sure if this is intended behavior, or a bug, but I started running into an issue that was similar to the issue reported here: #59 (comment).

Basically, when I create a notification like so:

let notification = new apn.Notification();
notification.payload = {
    aps: data
};

I am able to send that notification and I get a success response like so:

{"sent":[{"device":"test_device_id"}],"failed":[]}

However, the notification never shows up on my device.

If I manually set the aps property, the notification will show up on the device:

let notification = new apn.Notification();
notification.payload = {
    aps: data
};
notification.aps = data;

In the code: https://github.com/parse-community/node-apn/blob/master/lib/notification/index.js#L127, it looks like if the aps property is never set, the code is setting payload.aps to undefined. There is also a unit test to make sure the aps property is not present when the field is on the original payload object: https://github.com/parse-community/node-apn/blob/master/test/notification/index.js#L99.

In the documentation: https://github.com/parse-community/node-apn/blob/master/doc/notification.markdown#payload, the docs only mention that the aps property will be overridden on the payload object if aps was set on the object.

Is this the correct intended behavior? If so, can you please share why?

Typescript type check failed when passing proxy info to ProviderOptions.

I am following the doc to provide the proxy option when creating the APN provider, and I am using Typescript. code sample: https://www.npmjs.com/package/@parse/node-apn#connecting-through-an-http-proxy
but the TS compiler return an error when checking the types

error TS2345: Argument of type '{ token: { key: any; keyId: any; teamId: any; }; proxy: { host: any; port: number; }; production: false; }' is not assignable to parameter of type 'ProviderOptions'.
  Object literal may only specify known properties, and 'proxy' does not exist in type 'ProviderOptions'.

I checked the index.d.ts, and find the proxy option is missing.

Uncaught VError: Failed to generate token: secretOrPrivateKey must be an asymmetric key when using ES256

Hello, I have generated the token for push notifications at Keys section (https://developer.apple.com/account/resources/authkeys/list), enabled Apple Push Notifications service (APNs) there, but when using the generated key (AuthKey_XXXYYYZZZ.p8), I get an error Uncaught VError: Failed to generate token: secretOrPrivateKey must be an asymmetric key when using ES256 from lib/credentials/token/prepare.js:41:13.

I have found that the cause probably is that Apple's generated key is a symmetrical one. Is there a way to convert it to an asymmetrical one, or generate the one that will be accepted?

TypeError: Cannot read property 'ping' of undefined when pushing

Node version: v14.15.5
OS: Ubuntu
Lib version: 4.0.0

I get the following error when sending a push (running tail -f /var/log/syslog):

Feb 14 22:33:36 myappnamehere-parse parse-server[105441]: /home/myappnamehere/prod/node_modules/parse-server/lib/ParseServer.js:237
Feb 14 22:33:36 myappnamehere-parse parse-server[105441]:           throw err;
Feb 14 22:33:36 myappnamehere-parse parse-server[105441]:           ^
Feb 14 22:33:36 myappnamehere-parse parse-server[105441]: TypeError: Cannot read property 'ping' of undefined
Feb 14 22:33:36 myappnamehere-parse parse-server[105441]:     at ClientHttp2Session.ping (internal/http2/core.js:786:26)
Feb 14 22:33:36 myappnamehere-parse parse-server[105441]:     at Timeout.Client.healthCheckInterval.setInterval [as _onTimeout] (/home/myappnamehere/prod/node_modules/@parse/node-apn/lib/client.js:29:22)
Feb 14 22:33:36 myappnamehere-parse parse-server[105441]:     at ontimeout (timers.js:482:11)
Feb 14 22:33:36 myappnamehere-parse parse-server[105441]:     at Timer.unrefdHandle (timers.js:595:5)
Feb 14 22:33:36 myappnamehere-parse systemd[1]: parse-server.service: Main process exited, code=exited, status=7/NOTRUNNING
Feb 14 22:33:36 myappnamehere-parse systemd[1]: parse-server.service: Failed with result 'exit-code'.
Feb 14 22:33:39 myappnamehere-parse systemd[1]: parse-server.service: Service hold-off time over, scheduling restart.
Feb 14 22:33:39 myappnamehere-parse systemd[1]: parse-server.service: Scheduled restart job, restart counter is at 2.
Feb 14 22:33:39 myappnamehere-parse systemd[1]: Stopped Parse Server.

In the parse dashboard, I see the push(es) stuck in a "SENDING" state.

Any ideas?

Thanks!

Resource leak when calling shutdown before finish writing

This code causes resource leak and don't close the TLS socket

const apn = require('../');

let i = 0;

const pushToken = ''

function send(provider, token) {

  const note = new apn.Notification();
  note.alert = `Hey hello, I just sent my first Push Notification`;

  // The topic is usually the bundle identifier of your application.
  note.topic = '<my-topic>';

  console.log(`Sending: ${note.compile()} to`);

  return provider.send(note, [token]).then(result => {
    console.log('sent:', result.sent.length);
    console.log('failed:', result.failed.length);
    console.log(result.failed);
  });
}

async function run() {
  const users = [
    { name: 'Wendy', devices: [pushToken] },
  ];
  const service = new apn.Provider({
    // ...
  });

  Promise.all(
    users.map(user => {
      try {
        return send(service, pushToken);
      } finally {
        return service.shutdown();
      }
    }),
  )
    .finally(() => {
      printActiveHandles();

      if (i++ < 10) {
        run();
      } else {
        setInterval(() => {
          printActiveHandles()
        }, 1000)
      }
    });
}


function printActiveHandles() {
  const data = process._getActiveHandles();

  const formatted = data.map(item => item.constructor.name);

  console.log(`Got ${formatted.length} active handles`, formatted);
}

run();

this will log in the end:

Got 13 active handles [
  'WriteStream', 'WriteStream',
  'TLSSocket',   'TLSSocket',
  'TLSSocket',   'TLSSocket',
  'TLSSocket',   'TLSSocket',
  'TLSSocket',   'TLSSocket',
  'TLSSocket',   'TLSSocket',
  'TLSSocket'
]

Raise the minimum required node version to 12+ in a future major release?

(after releasing existing code)

node-apn is using a minimum of node 8 because that's required for the http2 module to work at all.

  • https://nodejs.org/en/about/releases/ indicates that node 10 will reach the end of security support on 2021-04-30
  • This would allow using new js features, although none come to mind - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes was supported even in node 6 and may be a style choice?
  • #66 node 8 and 10 seem to have known bugs in http2 that were fixed in node 12. Node 10 is only receiving security fixes, not bug fixes. With any refactoring there's the possibility of encountering those bugs or crashes, which would be problematic if integration tests did not cover a given edge case - the current implementation passes integration tests in node 10 but I'm not certain of the correctness of it avoiding underlying library bugs.

Not sure if this is practical for the parse organization, because https://github.com/parse-community/parse-server/blob/master/package.json still supports node 8

For my own use case of @parse/node-apn, I'm using node 14 because of concerns about potential bugs/crashes in node 10, and the fact that they wouldn't get fixed in node 10 if discovered.


It may be possible to maintain two release lines - add any refactorings to the newest major version, but backport bug fixes, APNs API functionality, and easy improvements to the older major version for node 8+

Node v15 error when using cert/key

It seems that something changed in Node v15 that makes http2 choke if a null pfx key is set in the options object. So if you're using node-apn with a cert/key pem, it will throw an error Unable to load PFX certificate because node-apn is setting pfx: null in the options object.

I've circumvented this for now by deleting the pfx key after the provider is instantiated: delete _apnsProvider.client.config.pfx.

Make topic not required

Currently the docs state that a topic must be specified for a notification, but this isn't always the case. From the apple docs:

If you omit this request header and your APNs certificate does not specify multiple topics, the APNs server uses the certificate’s Subject as the default topic.

send() can hang due to http2 client.request() apparently having no timeout

It seems like many connection timeouts and socket timeout customizations were taken out, and if there are networking issues, I'm concerned that requests to send() could hang forever (until the server ran out of memory?).

  • Memory rose, probably because this was an express app waiting for send() to finish.
  • I was seeing similar issues in node 12, but I think the spikes in send() request duration did not last arbitrarily long. There was refactoring of the http2 server to change the timeout from 120 seconds to no timeout, but I can't imagine why the client would be affected

https://nodejs.org/api/http2.html#http2_http2_connect_authority_options_listener mentions options are passed to net.connect.
https://nodejs.org/api/net.html#net_socket_settimeout_timeout_callback (That doesn't look like the correct thing - I probably want the timeout to apply to requests instead)

Similar to node-apn#665
Mentioned in #23


https://nodejs.org/api/http2.html#http2_http2stream_settimeout_msecs_callback may be what I want added to ensure that the - there's examples in the documentation. Instead of NGHTTP2_CANCEL, I may want to close the client and destroy it asynchronously if requests hang for too long.

I'm assuming that each request calling req.setTimeout is its own timeout - otherwise it could get extended indefinitely

const http2 = require('http2');
const client = http2.connect('http://example.org:8000');
const { NGHTTP2_CANCEL } = http2.constants;
const req = client.request({ ':path': '/' });

// Cancel the stream if there's no activity after 5 seconds
// Instead of NGHTTP2_CANCEL, I want to close the client and destroy it asynchronously if requests hang for too long.
// Not sure what new errors that would cause this to need to handle.
// This should also use the logger to indicate that node is cancelling the stream because it took too long.
// 5 seconds may be too low for a default for a wide variety of use cases - consider using a higher timeout and making this configurable
req.setTimeout(5000, () => req.close(NGHTTP2_CANCEL));

Alternate way for entering the key other than pathway

Hi,

I am using Firebase Functions and I have stored the keys into the Environment configurations, because that's the safest place, instead of putting it into a file.
My question is how can I build an options token by directly passing the key, rather than giving a filepath?

Add an optional identifier/prefix for debug logs emitted by an APNs client

Currently, node-apn emits debug logs such as apn Ping response after 11.645432 ms.

This is ambiguous if more than one provider/client instances are created, e.g. when pushing to more than one app, or if refreshing credentials and creating a new Provider (exceedingly unlikely).

It may be useful to have a prefix that could be added to the passed in options to disambiguate them to see when something went wrong in a given client, e.g. here, it could be inferred that first-app stopped responding to pings

apn first-app: Ping response after 11 ms
apn second-app: Ping response after 12 ms
apn second-app: Ping response after 12 ms
apn second-app: Ping response after 12 ms

Low priority because reliability will hopefully be improved in the next release

4.1 release package bug

index.d.ts:119

setLogger(logger: (string) => void, errorLogger?: (string) => void): Promise;

build error

I miss the localised subtitle properties `subtitle-loc-key` and `subtitle-loc-args` because you're using old Apple documentation

Thanks for this great lib.

The detailed apn.Notification documentation refers to the Apple payload documentation at https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html

This link is outdated, the modern docu can be found at https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/generating_a_remote_notification
In particular Table 2 is important, as it shows a set of new keys which is not present in your Convenience Setters.
Among them the subtitle and it's localised variants; subtitle-loc-key and subtitle-loc-args.

Would it be possible to add these and other missing ones and update your documentation?

Idea: support connection pooling where apn.Provider has a configurable number of 1+ clients

http2.connect creates a single encrypted TCP socket. This may have limited bandwidth if there is a bottleneck in APNs, or may be more prone to some requests (99.99% percentile) taking much longer than others (e.g. 5+ seconds). If there is a dropped packet, more data would need to be retransmitted.

  • Investigate if this is actually a bottleneck in applications using node-apn. Apple's documentation mentions there shouldn't be any deliberate caps
  • Other http2 clients such as https://godoc.org/golang.org/x/net/http2 maintains a connection pool internally
  • This could help avoid interruptions if the provider prefers clients which are connected over clients that are actively reconnecting - I haven't seen disconnections in practice, though

Add HTTP proxy support

The original node-apn had support for HTTP proxy. This feature was apparently lost with the migration to native HTTP2 module (even if it's this mentioned in the README). It would be great if it could be added again.

Custom header?

Hey,

I was wondering if it's possible to set custom headers so we can try things like silent notifications? Apple says you need to pass a few key value pairs in the header to achieve that.

I am looking to set the apns-priority, apns-push-type & content-availability.

How can you send custom key / value pairs in the header with each request?

[Question] How do i use the buffer for the key parameter?

I copied the key from the .p8 file into my firebase config functions.config().apple.apn.key. Is it possible to put the stringified key into the buffer to do something like this?

var options = {
  token: {
    key: Buffer.from(functions.config().apple.apn.key),
    keyId: "key-id",
    teamId: "developer-team-id"
  },
  production: false
};

var apnProvider = new apn.Provider(options);

Reject payloads before they are sent to APNs if they're too large

Request ended with status 413 and responseData: {"reason":"PayloadTooLarge "}

https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html#//apple_ref/doc/uid/TP40008194-CH10-SW1 indicates that

  • For regular remote notifications, the maximum size is 4KB (4096 bytes)
  • For Voice over Internet Protocol (VoIP) notifications, the maximum size is 5KB (5120 bytes)

For example, add a default of 4096 bytes, and allow it to be overridden to a larger positive integer for VoIP or to account for future changes to APNs limits

  • Buffer.from(string) can be used to convert the raw payload to the bytes to send, and buffer.length gets the length in bytes (instead of codepoints)

If, for example, a client were to attempt to send a JSON payload that was 1 megabyte in size due to failing to truncate part of the input, it would be useful to prevent something that would definitely fail from being sent to APNs, especially if it blocked other requests to APNs or APNs server closes the connection (haven't checked if they currently do that).

(lib/provider.js is what does the final JSON.stringify)

IOS devices stop receiving the Push notifications

Dear folks,
From March 15th, all iOS devices using our App have stopped receiving push notifications. When I checked the server logs, I see the below set of errors

  1. apn Session error: Error: unable to get local issuer certificate.
  2. apn Request error: Error [ERR_HTTP2_STREAM_CANCEL]: The pending stream has been canceled (caused by: unable to get local issuer certificate)
  3. apn Request ended with status null and responseData:
  4. ErrorWithStatus: stream ended unexpectedly\n at /home/vcap/app/node_modules/node-push/middleware/proxyPushNotification.js:23:10\n at process._tickCallback

Any idea or help?

Best Regards,
Sami

iOS Push Notification Error: {reason: 'TopicDisallowed'}

Please read carefully before closing. I'm struggling to resolve notifications for more than a week and still it's half way resolved.

  • I'm using the production certificate.
  • It's working fine sometimes and suddenly starts throwing: { reason: 'TopicDisallowed' }
  • It's working perfectly fine on localhost.
  • It works fine sometimes on the server too (the issue is unstable). It automatically starts working and stops.

Here is the provider config:

const apn = require('@parse/node-apn'); // version: "@parse/node-apn": "^5.1.3"
const iosOptions = {
  token: {
    key: path.resolve('./lib/AuthK*********.p8'),
    keyId: '*********',
    teamId: '*******'
  },
  production: true
};

const apnProvider = new apn.Provider(iosOptions);
const apnNotification = new apn.Notification();
apnNotification.sound = 'default';
apnNotification.title = data.title;
apnNotification.body = data.message;
apnNotification.aps.threadId = threadId;
apnNotification.topic = topic;
apnNotification.payload = payload;
apnNotification.pushType = 'alert';
apnNotification.expiry = Math.floor(Date.now() / 1000) + 3600;

apnProvider.send(apnNotification, token)

Is there anything wrong with the config?

Error message: reason: 'TopicDisallowed'

PS: I dynamically change provider options to send notifications from multiple team IDs. Is there anything to do with provider.shutdown()? Because I'm not closing this.

As said, it suddenly starts throwing the error, not always. Please help if someone knows the solution.

update apple root cert?

On March 29, 2021, token and certificate-based HTTP/2 connections to the Apple Push Notification service must incorporate the new root certificate (AAACertificateServices 5/12/2020) which replaces the old GeoTrust Global CA root certificate. To ensure a seamless transition and to avoid push notification delivery failures, verify that both the old and new root certificates for the HTTP/2 interface are included in the Trust Store of each of your notification servers before March 29.

Will this be updated in the package?

VError: apn write timeout

Recently I am getting this error after sending about 11k push messages of 22k. The app was restarted and the behavior is the same.

VError: apn write timeout
2020-12-11 14:44 +00:00:       at ClientHttp2Stream.<anonymous> (/node_modules/@parse/node-apn/lib/clie
nt.js:207:34)
       at Object.onceWrapper (events.js:420:28)
       at ClientHttp2Stream.emit (events.js:314:20)
       at callTimeout (internal/http2/core.js:2181:8)
       at ClientHttp2Stream._onTimeout (internal/http2/core.js:1882:5)
       at listOnTimeout (internal/timers.js:554:17)
       at processTimers (internal/timers.js:497:7) {
     jse_shortmsg: 'apn write timeout',
     jse_info: {}
}

It seems the push messages are still processed by Apple.

Modernize code (use typescript, use class syntax instead of prototype)

A switch to typescript may make sense in a major version

index.d.ts may get out of sync with the implementation. It may be easier to write everything in typescript and add a publish hook to convert code to typescript
(https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-dynamodb/package.json https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html#including-declarations-in-your-npm-package https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-dynamodb/tsconfig.json)

(the publish hook would trigger a typescript build to dist/ or a subdirectory)

Alternately, with --checkJs, jsdoc can be type checked in CI


Also, class syntax can be used in node 6+ - the upstream code was supporting node 4+ and declared function Client instead of class Client https://github.com/parse-community/node-apn/blob/master/lib/client.js


What are the maintainer's thoughts on those ideas? Would you accept PRs?

GOAWAY errors

We have consistently been getting this error on about 1 out of 100 notifications we sent. Any idea how we can fix this?

apn write failed: New streams cannot be created after receiving a GOAWAY

Error: ENOENT: no such file or directory, open 'cert.pem'

I have configured the options using an AuthKey but they lib still tries to load the cert.pem file.

// apn.options.js
export const ApnOptions = {
  token: {
    key: "AuthKey_xxx.p8",
    keyId: "xxx",
    teamId: "xxx",
  },
  production: process.env.NODE_ENV === "production",
};
// push.js
import { ApnOptions } from "./apn.options";

const provider = new apn.Provider(ApnOptions);

Throws the following error:

Error: ENOENT: no such file or directory, open 'cert.pem'
    at Object.openSync (fs.js:476:3)
    at Object.readFileSync (fs.js:377:35)
    at resolveCredential (/usr/srv/app/node_modules/@parse/node-apn/lib/credentials/resolve.js:16:15)
    at loadCredentials (/usr/srv/app/node_modules/@parse/node-apn/lib/credentials/certificate/load.js:12:16)
    at loadAndValidate (/usr/srv/app/node_modules/@parse/node-apn/lib/credentials/certificate/prepare.js:11:20)
    at config (/usr/srv/app/node_modules/@parse/node-apn/lib/config.js:50:22)
    at new Client (/usr/srv/app/node_modules/@parse/node-apn/lib/client.js:26:19)
    at new Provider (/usr/srv/app/node_modules/@parse/node-apn/lib/provider.js:12:19)
    at new PushRemindersJob (/usr/srv/app/src/cron/jobs/push.reminders.job.js:27:21)
    at Task._nodeCron.default.schedule.scheduled [as execution] (/usr/srv/app/src/cron/push.cron.js:13:15) {
  errno: -2,
  syscall: 'open',
  code: 'ENOENT',
  path: 'cert.pem'

Am I missing something?

Updated APNs provider API deadline

The HTTP/2-based Apple Push Notification service (APNs) provider API lets you take advantage of great features, such as authentication with a JSON Web Token, improved error messaging, and per-notification feedback. If you send push notifications with the legacy binary protocol, we strongly recommend upgrading to the APNs provider API.

To give you additional time to prepare, the deadline to upgrade to the APNs provider API has been extended to March 31, 2021. APNs will no longer support the legacy binary protocol after this date.

Does it have any impact on the node-apn package?

Stream ended unexpectedly with status null and empty body

Hi, I'm having this issue randomly when I try to send a notification. Sometimes works, and sometimes I have this error. Anyone know that could be happening?

apn error: Request error: Error [ERR_HTTP2_STREAM_CANCEL]: The pending stream has been canceled (caused by: Client network socket disconnected before secure TLS connection was established)
apn error: Session error: Error: Client network socket disconnected before secure TLS connection was established
apn error: Session closed
stream ended unexpectedly with status null and empty body

I'm using the version 4.1.1 and I tried upgrading to the 5.0.0, but the issue continues.

I catched this errors adding my custom logger.
Logger:

const provider = new apn.Provider(config.apns);

const infoLogger = provider.client.logger;
const errorLogger = (message) => { console.log(`apn error: ${message}`); };  // logger is declared elsewhere
errorLogger.enabled = true; // required to emulate npm debug module's interface

provider.client.setLogger(infoLogger, errorLogger);

iOS Device Does not receive Notification even though it is sent from node-apn

I just upgraded to the APNS Provider API from Legacy API, and I am sending the Push Notification from my Provider Server to an apple device. The node-apn Provider API gives a response like this:

0|app  | [iOS] Push Notification Transmitted.
0|app  |  {
0|app  |   "sent": [
0|app  |     {
0|app  |       "device": "c5d152f295a7c735c1d8ba837ac99f2caa86eb6e004e29b7a9455db25fd0f2bc"
0|app  |     }
0|app  |   ],
0|app  |   "failed": []
0|app  | }

But the device is not showing the push notification that was just sent to it. Is it APNS issue or am I missing something in the configuration of the Provider Server?

P.S. This functionality works with the older Legacy API, but the problem starts to occur when I update the Provider Server code to use the new Provider API.

Publish a new 5.0.0 release?

#66 was merged a while ago but no release was created.

.github/workflows/release.yml is using node 10.14, and the minimum node version package.json is 12, but it seems unrelated - instead, the issue is just that no GitHub release is created?

Are there any other planned changes for the major release?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.