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推送通知未显示在应用程序中[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

ios设备中未收到VoIP推送[关闭]

如果应用程序终止,则未收到 iOS FCM 推送通知

推送通知未在 iOS 10 设备中显示

静默推送通知是不是能够唤醒 ios 中处于未运行状态的应用程序?

Xamarin.iOS - 设备关闭时推送通知

当应用程序关闭或不活动时,如何处理 iOS 应用程序中的推送通知?