APNS应该使用HTTP2还是TSL

时间:2017-02-14 15:07:39

标签: ios iphone apple-push-notifications http2 apns-php

首先,对不起,如果这是一个偏离主题的问题。我觉得这是一个合法回应的最佳去处,因为你们和男孩从未让我失望。

所以,我聘请了一位iOS APP开发人员来帮助我完成一个项目。我从来没有进入iOS应用程序编程,所以我只是在做他告诉我的事情。我的项目是一个PHP应用程序,它向iOS用户发送通知,这些用户作为注册用户(拥有APNS令牌)存储在数据库中。但是,当通过Apple推送通知服务发送通知时,我们遇到了大量的障碍。

开发人员告诉我下面的代码是发送通知的唯一方法:

    $token = 'created From APNS  - stored on a DB';
    $message = "hello world";
    $unread_msg_count = 'x';
    $passphrase = 'xxxxxxx'; // This is the passphrase used for file ck.pem
    $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); // ck.pem file stored in same directory 
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
    stream_context_set_option($ctx, 'ssl', 'verify_peer', true);
    stream_context_set_option($ctx, 'ssl', 'allow_self_signed', true);
    $fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx);

    if (!$fp) {
        $fds = "Failed to connect: $err $errstr" . PHP_EOL;
        return false;
    } else {        

        // Create the payload body
        $body['aps'] = array('alert' => $message, 'sound' => 'default', 'badge' => 1);
        $body['server'] = array("unread_msg_count" => $unread_msg_count);
        // Encode the payload as JSON
        $payload = json_encode($body);
        // Build the binary notification
        $msg = chr(0) . pack('n', 32) . pack('H*', str_replace(' ', '',$token)) . pack('n', strlen($payload)) . $payload;
        // Send it to the server
        $result = fwrite($fp, $msg, strlen($msg));
        // Close the connection to the server
        fclose($fp);
        return $result; 
     }

ck.pem文件与上述脚本位于同一目录中,开发人员确保它是正确的文件。

这里的问题是我使用godaddy来托管我的网站,使用他们的共享托管平台。使用共享主机时,godaddy不允许使用除端口80和端口443之外的任何端口。由于上面的APNS方法需要使用端口2195,我最终必须设置本地XAMPP服务器来尝试发送通知。这一切看起来都很笨重,通知也没有用。

我正在研究APNS是如何工作的,而且我可以告诉我开发人员提供给我的方法被认为是遗留代码According to Apples Documentation。似乎首选方法现在使用HTTP2,它需要端口443而不是端口2195.如果这是真的,我应该能够直接从godaddys服务器推送通知,而不需要我自己的本地服务器。

我提出了向我的开发人员使用HPPT2的可能性,他告诉我他提供给我的方法是唯一可行的方法。我对专业人士的问题是,我的开发人员是正确的还是我应该使用HTTP2?如果我的开发人员是正确的,那么他提供给我的方法是否可以正确编码以便在TestFlight环境中使用?

0 个答案:

没有答案