【问题标题】:iOS PushNotification iPhone and iPadiOS 推送通知 iPhone 和 iPad
【发布时间】:2014-08-07 15:57:10
【问题描述】:

我制作了一款具有推送通知功能的通用应用程序。相信你读到这里也会感到惊讶。

在生产版本(应用商店构建)中,我在 iPad 上收到推送消息,而我在 iPhone 上没有收到此类通知。

应用程序是为通用而构建的,因此当然代码与 Appdelegate 相同,iPad 和 iPhone 也相同。

自从去年 4 年以来,我一直在制作 iOS,从未遇到过这样的问题。

一件事是确保我的推送通知实现是正确的,否则我将永远不会在我的 iPad 上收到推送消息。

任何帮助????

谢谢, 帕特

修改:

请检查下面的 PHP 代码,相同的代码(复制/过去)适用于我的另一个应用程序,但它不会。 再次,如果我在单个设备上发送推送,我将在所有设备上接收,但如果我尝试使用循环发送到所有设备,我只会在一个设备上接收。 (可能是表格的第一行)

$payload = json_encode($body);
for($i = 0; $i<count($deviceTokens); $i++) {
$msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '',$deviceTokens[$i])) . pack("n",strlen($payload)) . $payload;
fwrite($fp, $msg);
}
fclose($fp);

在这里我将 echo 放入 for 循环中,我得到了所有注册设备。

【问题讨论】:

  • 您确定要分别发送给两者吗?
  • 您是否正在向每个设备令牌发送消息?
  • 是的,发送到所有设备,甚至在我的其他 iPad 上收到
  • 我认为这不是 Apple 方面的问题,这一定是 PHP 服务器端的编码问题。从 MySql 我已经用我的 iPhone 令牌替换了我的 DeviceToken(iPad),现在我在我的手机上收到了,而不是在我的 iPad 上。我在想的是它只需要第一张唱片。因此,我对其进行了调试,并再次感到惊讶,它不仅需要一个,而且可以按预期工作/表现。
  • 知道了,它可能会出现 DeviceToken 问题,无论如何,如果您获得另一个应用程序设备令牌(如果您复制过去的代码通常会发生这种情况),那么就会出现这种问题。我通过简单地从数据库中删除所有设备令牌来修复它。

标签: php ios ipad push-notification


【解决方案1】:
for($i = 0; $i<count($deviceTokens); $i++) {

pushnotification_ios($deviceTokens, "Your Message");
}

循环调用这个函数..

function pushnotification_ios($device_token, $message){

        $passphrase = "Your_PEM_File_Password_Here";

        $ctx = stream_context_create();
        stream_context_set_option($ctx, 'ssl', 'local_cert', YOUR_PEM_FILE_PATH_HERE);
        stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
    // use this when you in sandbox mode..
        $fp = stream_socket_client(
            'ssl://gateway.sandbox.push.apple.com:2195', $err,
        $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
    // use this when you in development mode..
    //  $fp = stream_socket_client(
    //  'ssl://gateway.push.apple.com:2195', $err,
    //$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

        $body['aps'] = array(
            'badge' => $badge,
            'alert' => $message,
            'sound' => 'default',
            'content-available' => '1'
        );
    //echo "<pre>"; print_r($body);
        $payload = json_encode($body);

        $msg = chr(0) . pack('n', 32) . pack('H*', $device_token) . pack('n', strlen($payload)) . $payload;

        $result = fwrite($fp, $msg, strlen($msg));  //echo "<pre>"; print_R($result);
        /*
        if (!$result){
            $data = array(
                'Message' => 'Message not delivered' . PHP_EOL
                );
            }  else {
        $data = array(
                'Message' => 'Message successfully delivered' . PHP_EOL
                );
        } //echo "<pre>"; print_R($result); */

        fclose($fp);
    return $result;
    }

【讨论】:

    猜你喜欢
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多