iOS,电话间隙推送插件('通知')未触发

Posted

技术标签:

【中文标题】iOS,电话间隙推送插件(\'通知\')未触发【英文标题】:iOS , Phone gap push plugin on('notification') not triggerediOS,电话间隙推送插件('通知')未触发 【发布时间】:2016-04-26 06:53:46 【问题描述】:

我正在使用 (push-plugin) 通过 phone Gap 向 iPhone 发送通知。

我做了什么

为 phoneGap 项目添加了推送插件 我正在成功获取设备令牌。 我发送成功 使用服务器 (php) 作为后端向 APN 发送通知 但我无法接收通知

这是我的工作代码(phoneGap - 客户端):

var push = PushNotification.init(
    ios: 
        "alert": "true",
         "badge": "true",
         "sound": 'false'
    
);
push.on('registration', function(data) 
    console.log('your device token',data.registrationId);
);
push.on('notification', function(data) 
    console.log(('test');
    console.log(data.message);
    console.log(data.title);
    console.log(data.count);
    console.log(data.sound);
    console.log(data.image);
    console.log(data.additionalData);
);
push.on('error', function(e) 
    console.log(e.message);
);

这是我的服务器代码 (PHP)

<?php

   $deviceToken = '<my _device_token>';

// Put your private key's passphrase here:
$passphrase = '<pass_phrase>';

// Put your alert message here:
$message = "This is test notification"; 
$url = "http://google.com";

if (!$message || !$url)
    exit('Example Usage: $php newspush.php \'Breaking News!\' \'https://google.com\'' . "\n");

////////////////////////////////////////////////////////////////////////////////

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'abcdxyz.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',
  'link_url' => $url,
  'category' => "NEWS_CATEGORY",
  );

// 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);

环境: 科罗多瓦版本:6.1.2 phonegap-plugin-push 版本:1.6.2 iPhone版本:9.2

问题 为什么我的移动设备无法接收通知?

【问题讨论】:

【参考方案1】:

我通过在push.on('notification',function()); 中附加以下函数解决了上述问题

push.finish()

例子:

push.on('notification', function(data) 

       console.log(data.message);
       console.log(data.title);

       push.finish(function () 
       
           console.log('finish successfully called');
       );    
);

【讨论】:

以上是关于iOS,电话间隙推送插件('通知')未触发的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 未确定推送通知

当应用程序未连接到 xcode 时,iOS 8 静默推送通知不会触发 didReceiveRemoteNotification 方法

手机间隙中的android推送通知没有收到通知

Cordova 推送通知 ios

设备令牌电话间隙

iOS 本地推送通知未唤醒设备