ios推送通知未显示在应用程序中[关闭]
Posted
技术标签:
【中文标题】ios推送通知未显示在应用程序中[关闭]【英文标题】:ios Push notification not showing up in App [closed] 【发布时间】:2014-03-15 00:14:00 【问题描述】:我正在尝试在我的 ios7 应用中设置推送通知,但遇到了问题。
在创建证书和配置文件的过程中,基本上不会出现推送。目前我只为开发而构建它,当我准备好提交它时,我会制作发行版。但在开发设置中,一切似乎都是正确的。我制作了一个 php 文件来创建字典格式的消息,我相信这方面的一切都是正确的。正确添加了密码,并且我正确连接到 APNS 服务器(开发端)我可以告诉这一点,因为当我的密码不正确时,它确实会失败。
通过浏览与 PUSH 相关的 iOS 开发文档,我在手机上添加了一个 persistantConnection 配置文件并查看详细的日志文件,根据该数据,它也应该可以工作。
我并不完全熟悉阅读这些数据,但我被告知要寻找的好东西在那里,而坏东西却没有。
我将附上我的 PHP 脚本和来自设备的日志
PHP 脚本
session_start();
if($_POST['message'])
$deviceToken = array();
$deviceToken[0]="xxxx3ee0 3xxxx973 6bxxxxea 2843xxxx dx5xbx1x x4x8x0xe 7xx65xx9 x61xx01x";
$payload ='
"aps" :
"alert" : "'.$_POST['message'].'"
, "badge" : 1
, "sound" : "bingbong.aiff"
';
/*
$payload = '
"aps":
"alert": "alert",
"sound": "default"
,
"message": "'.$_POST['message'].'",
"id": 1234
';
*/
$apnsHost = 'gateway.sandbox.push.apple.com';
$apnsPort = 2195;
$apnsCert = 'ck.pem';
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
stream_context_set_option($streamContext, 'ssl', 'passphrase', "xoxoxoxo");
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
if(!$apns)
print"Stream failed to create ". $error. " ".$errorString;
return;
else
print"Message Sent";
foreach($deviceToken as $key=>$value)
$apnsMessage = chr(0) . pack("n",32) . pack('H*',str_replace(' ', '', $value)) . pack ("n", strlen($payload)) . $payload;
// $apnsMessage = chr(0) . chr(0) . chr(32) . @pack('H*', str_replace(' ', '', $value)) . chr(0) . chr(strlen($payload)) . $payload;
fwrite($apns, $apnsMessage);
print "<BR>Message Delivered - ". $payload;
fclose($apns);
?>
<form action="blanket.php" method="post">
<input type="text" placeholder="message" name="message">
<input type="submit" value="submit">
</form>
根据文档,这就是我要找的东西
我看到了:
查找来自 apsd 进程的消息。理想情况下,您会看到 Connected to courier x-courier.sandbox.push.apple.com 其中 x 是一个小整数。这表明设备已成功建立与推送服务的持久连接。
我没有看到这个:
另一方面,您可能会看到因连接失败而断开连接。这意味着持久连接失败。在这种情况下,目标是找出导致连接失败的网络发生了什么。检查是否没有防火墙阻止端口 5223 上的 TCP 流量。
我没有看到这个:
消息连接集忽略主题意味着用户选择关闭消息中列出的应用的通知。随后是 Sending filter message for enabled hashes,这是 iOS 实际将启用和忽略的主题发送到 APNs 的地方。
我没有看到这个:
消息 Failed to parse JSON message payload 表示通知负载中的 JSON 字典不是有效的 JSON 格式。
不好的是我也没有看到这个:
消息 Received message for enabled topic 表示设备收到推送服务的通知。
DATA FROM LOG 搜索此条件“已连接到 Courier” 显示良好的信息
2014-03-14 14:56:54 -0700 apsd[83]: <APSCourier: 0x16e49ff0> attempting to _connectStream. currently onInterface WWAN consecutiveFailures 0 preference NonCellular shouldUseDualChannel YES. Connected on 1 interfaces.
2014-03-14 14:56:54 -0700 apsd[83]: <APSCourier: 0x16d78f70> attempting to _connectStream. currently onInterface WWAN consecutiveFailures 0 preference NonCellular shouldUseDualChannel YES. Connected on 1 interfaces.
2014-03-14 14:56:54 -0700 apsd[83]: <APSCourier: 0x16d78f70>: Connected to courier 2-courier.sandbox.push.apple.com (17.149.34.142) connection: <APSCourierConnection: 0x16d79810> onInterface: NonCellular
2014-03-14 14:56:54 -0700 apsd[83]: <APSCourier: 0x16e49ff0>: Connected to courier 30-courier.push.apple.com (17.149.36.134) connection: <APSCourierConnection: 0x16d4a380> onInterface: NonCellular
2014-03-14 14:56:55 -0700 apsd[83]: <APSCourier: 0x16d78f70>: Calling into AWD for PushConnectionConnected
2014-03-14 14:56:55 -0700 apsd[83]: <APSCourier: 0x16e49ff0>: Calling into AWD for PushConnectionConnected
2014-03-14 14:57:52 -0700 apsd[83]: <APSCourier: 0x16d78f70> - systemDidLock and we're connected via noncellular, sending inactive ping to the server
2014-03-14 14:57:52 -0700 apsd[83]: <APSCourier: 0x16e49ff0> - systemDidLock and we're connected via noncellular, sending inactive ping to the server
2014-03-14 14:57:57 -0700 apsd[83]: <APSCourierConnection: 0x16d4a380> WWAN is connected; to be consistent, closing the non-cellular connection
2014-03-14 14:57:57 -0700 apsd[83]: <APSCourier: 0x16e49ff0> courierConnection <APSCourierConnection: 0x16d4a380> asked us to disconnect stream on interface NonCellular. Connected on 2 interfaces.
2014-03-14 14:57:57 -0700 apsd[83]: <APSCourier: 0x16e49ff0>: Calling into AWD for ConnectionDisconnected
2014-03-14 14:57:57 -0700 apsd[83]: <APSCourier: 0x16e49ff0> courierConnection <APSCourierConnection: 0x16d4a380> asked us to disconnect stream on interface NonCellular. Connected on 1 interfaces.
2014-03-14 14:57:57 -0700 apsd[83]: <APSCourier: 0x16e49ff0>: Calling into AWD for ConnectionDisconnected
2014-03-14 14:57:57 -0700 apsd[83]: <APSCourier: 0x16e49ff0> attempting to _connectStream. currently onInterface WWAN consecutiveFailures 0 preference None shouldUseDualChannel NO. Connected on 1 interfaces.
2014-03-14 14:57:57 -0700 apsd[83]: <APSCourier: 0x16e49ff0> _connectStream - caller is ensuring that we are connected. We are so there's nothing to do here. - Connected on 1 interfaces.
2014-03-14 14:57:57 -0700 apsd[83]: <APSCourierConnection: 0x16d79810> WWAN is connected; to be consistent, closing the non-cellular connection
2014-03-14 14:57:57 -0700 apsd[83]: <APSCourier: 0x16d78f70> courierConnection <APSCourierConnection: 0x16d79810> asked us to disconnect stream on interface NonCellular. Connected on 2 interfaces.
2014-03-14 14:57:57 -0700 apsd[83]: <APSCourier: 0x16d78f70>: Calling into AWD for ConnectionDisconnected
2014-03-14 14:57:57 -0700 apsd[83]: <APSCourier: 0x16d78f70> courierConnection <APSCourierConnection: 0x16d79810> asked us to disconnect stream on interface NonCellular. Connected on 1 interfaces.
2014-03-14 14:57:57 -0700 apsd[83]: <APSCourier: 0x16d78f70>: Calling into AWD for ConnectionDisconnected
2014-03-14 14:57:57 -0700 apsd[83]: <APSCourier: 0x16d78f70> attempting to _connectStream. currently onInterface WWAN consecutiveFailures 0 preference None shouldUseDualChannel NO. Connected on 1 interfaces.
2014-03-14 14:57:57 -0700 apsd[83]: <APSCourier: 0x16d78f70> _connectStream - caller is ensuring that we are connected. We are so there's nothing to do here. - Connected on 1 interfaces.
据我所知,它应该可以工作,但事实并非如此。
有什么想法吗?
【问题讨论】:
我现在也有同样的问题。你能找出问题所在吗? Per cmets on a deleted answer,这是由证书问题引起的,应删除或关闭,因为不可重现。 【参考方案1】:您能否尝试删除设备令牌之间的空白,以便您的设备令牌看起来像
$deviceToken[0]="xxxx3ee03xxxx9736bxxxxea2843xxxxdx5xbx1xx4x8x0xe7xx65xx9x61xx01x";
据我所知,设备令牌不应包含任何空格和符号
还可以检查请求和反馈服务的返回码,以向您提供有关 here 提到的失败推送通知的信息
如果有效,请告诉我
【讨论】:
以上是关于ios推送通知未显示在应用程序中[关闭]的主要内容,如果未能解决你的问题,请参考以下文章