phonegap-plugin-push无法使用iOS 9

时间:2015-11-16 07:51:55

标签: ios cordova apple-push-notifications phonegap-plugins phonegap-pushplugin

我正在使用新插件“phonegap-plugin-push”覆盖旧版PushPlugin以获取有关cordova应用的推送通知。

通知在Android和iOS 8上都运行良好,但是当我使用iOS 9时,它已成功注册并返回令牌,后端代码返回成功,但设备未收到通知!

这是前端代码

var push = PushNotification.init({ "android": {"senderID": "12345679"},
     "ios": {"alert": "true", "badge": "true", "sound": "true"}, "windows": {} } );

push.on('registration', function(data) {
    var token = data.registrationId
});

push.on('notification', function(data) {
    // data.message,
    // data.title,
    // data.count,
    // data.sound,
    // data.image,
    var data =  data.additionalData
});

push.on('error', function(e) {
    // e.message
}); 

这是我的后端代码

$deviceToken = "019451814eff224c5dceca49b34b7b635d0716c21da2a77e7fd0809fd508d6z4";
$passphrase = 'myPassPhrase';

$message = 'You have recieved new notification!';


$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

// Open a connection to the APNS server
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
 exit("Failed to connect: $err $errstr" . PHP_EOL);

echo 'Connected to APNS' . PHP_EOL;

// Create the payload body
$body['aps'] = array(
'alert' => $message,
'sound' => 'default',
'data' => 'test data'
);

// Encode the payload as JSON
$payload = json_encode($body);

// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n',         strlen($payload)) . $payload;

// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));

if (!$result)
echo 'Message not delivered' . PHP_EOL;
else
echo 'Message successfully delivered' . PHP_EOL;

// Close the connection to the server
fclose($fp);

}

请帮忙吗?! 提前致谢

1 个答案:

答案 0 :(得分:3)

我找到了解决问题的方法,

您可以在此article

中找到详细解答

实际上它并不确定,但它是多个因素的组合 1-一定要使用Xcode 7.1.1(到目前为止最新的稳定版) 2-确保创建APNS Production NOT DEVELOPMENT证书然后下载

enter image description here

3-拖动它或用钥匙串访问它打开它展开它并导出私钥作为yourAppNameKey.p12

enter image description here

然后我们需要为证书生成pem文件,所以通过终端写:

free

注意:在最后一步中,我们使用了我们在步骤2中下载的证书

5-现在我们将私钥的.p12文件转换为.pem文件:

malloc

注意:系统会要求您输入用于导出私钥的密码并插入密码并确认其在服务器端代码中使用

6 - 最后,我们将证书和密钥合并到一个.pem文件中:

 openssl x509 -in aps_production.cer -inform der -out yourAppNameCert.pem

here is a sample of the server side code

希望它适用于所有人..谢谢