如何通过 PHP 调用我的 Apple 推送通知节点脚本? (已经在 ssh 中工作)

How can I call my Apple Push Notification node script via PHP? (already works in ssh)

我从来没有沉迷于 node.js,但现在我不得不这样做,以便能够在我的 iPhone 应用程序中实现推送通知。

我已经成功创建了一个节点脚本,它成功地将苹果通知推送到移动设备。

我可以通过 ssh 运行 脚本,它工作正常。

我使用以下代码创建了一个 php 脚本...

<?php
    $output = shell_exec("/home1/devjustin/nodejs/bin/node /home1/devjustin/apns/index.js 2>&1");
    print_r ($output);
?>

现在这是我的问题...

如果我通过浏览器 运行 php 脚本,我的 phone 上不会弹出通知。 php 脚本确实与节点脚本进行了交互,但它似乎在节点脚本的最后失败了,根本没有任何解释,也没有显示任何错误。

如果我 运行 通过 php mobile-push.php 在 ssh 中使用 php 脚本,它会像我希望的那样工作,并且我会在 [=58] 上弹出一个通知=].

所以,几天后,我的意思是几天后,我还没有找到解决方案。

我在想是不是我的主人。我目前正在 运行 通过 hostgator 创建一个共享服务器,虽然看起来我需要的所有权限都在那里并且处于活动状态。

如有任何帮助,我们将不胜感激。如果你想让我提供例子,我很乐意。

我的应用程序需要此功能,以便在执行操作并将其上传到我的服务器时,我可以向受到上传数据影响的用户触发推送通知。

P.S:我在我的节点脚本中创建了一些 console.log 行,当通过我的浏览器 运行 运行 php 脚本时,它们都会显示出来,除了控制台打印我的节点脚本的以下部分:

// index.js
// Actually send the notification
apnProvider.send(notification, deviceToken).then(function(result) {  
    console.log(result);
});

此致,

贾斯汀。

关于以下与 edwin 的讨论:

console - starting
console - tokens set...
console - second last stage
console for apnProvider - EventEmitter {
  client: 
   Client {
     config: 
      { token: [Object],
        ca: null,
        passphrase: null,
        production: false,
        address: 'api.development.push.apple.com',
        port: 443,
        rejectUnauthorized: true,
        connectionRetryLimit: 10,
        heartBeat: 60000 },
     endpointManager: 
      EventEmitter {
        domain: null,
        _events: [Object],
        _eventsCount: 2,
        _maxListeners: undefined,
        _endpoints: [],
        _endpointIndex: 0,
        _config: [Object],
        _connectionFailures: 0 },
     queue: [] },
  domain: null,
  _events: {},
  _eventsCount: 0,
  _maxListeners: undefined }

//notification console output
{ encoding: 'utf8',
  payload: { id: 123 },
  compiled: false,
  aps: 
   { badge: 3,
     sound: 'ping.aiff',
     alert: 
      { body: '[Cancelled] Friday, 4th of August at 3:00PM.',
        title: 'Business Name' } },
  expiry: 1501839082,
  priority: 10,
  topic: 'com.mybundleid.mybundleid' }

我通过 php 在脚本上有 运行 一个 strace,这是断点。有人可以帮我理解吗?

console - tokens set...
console - second last stage
open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 10 --- SIGABRT {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=26871, si_uid=638} --- +++ killed by SIGABRT +++

此错误与授予网络用户的权限有关。我能够完全执行文件中剩余代码的唯一方法是授予 root 访问权限或高于 Web 用户级别的权限。

因为这不是我准备使用的选项,所以我放弃了节点脚本,并使用我在 SO 上找到的这三个链接在 php 中重写了整个推送发送通知系统作为我的资源(以防其他人需要服务器端发送方面的帮助)。

Sending multiple iphone push notifications + APNS + PHP + Tutorial

Generate .pem file Used to setup Apple PUSH Notification

我现在可以通过访问 php 脚本通过我的应用程序自动发送推送通知。这样,通过一些额外的 php,用户现在可以在应用程序或网络平台上通过苹果推送通知相互交互。

此致,

贾斯汀。