如何通过 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,用户现在可以在应用程序或网络平台上通过苹果推送通知相互交互。
此致,
贾斯汀。
我从来没有沉迷于 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,用户现在可以在应用程序或网络平台上通过苹果推送通知相互交互。
此致,
贾斯汀。