加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – APNS推送通知不适用于生产

发布时间:2020-12-15 02:00:17 所属栏目:百科 来源:网络整理
导读:我创建了一个应用程序来从Web服务器发送远程通知。 当我在开发模式中测试应用程序时,所有的通知都正确地在手机上到达,AppStore发布后,该应用没有收到通知。 这是我做的: 创建一个生产的私钥,一个用于开发。 通过传递之前的CertFile生成在我的应用程序ID
我创建了一个应用程序来从Web服务器发送远程通知。
当我在开发模式中测试应用程序时,所有的通知都正确地在手机上到达,AppStore发布后,该应用没有收到通知。

这是我做的:

>创建一个生产的私钥,一个用于开发。
>通过传递之前的CertFile生成在我的应用程序ID上生成两个SSL证书。我已经100%确实已经正确生成了2键,并将其正确传递给了AppID下的开发人员中心的SSL证书。
创建一个文件.pem进行开发,一个用于生产(通过转换从我的KeyChain等提取的文件.p12)。
>创建2个不同的配置文件,一个用于开发,一个用于生产连接到步骤1的AppID。
>使用在步骤4中创建的正确的配置配置文件在“构建设置”中签署了该应用程序。
>创建一个Web应用程序来捕获和存储用户令牌。
>创建一个php页面来测试推送通知发送。

这是我测试的:

>使用telnet在沙箱链接上测试开发生成的.pem文件,并提供成功的答案。
>使用telnet在生产链接上测试生成的.pem文件,并提供成功的答案。
>我100%肯定已经存储在我的网络应用程序的开发令牌我的iPhone。
>我100%肯定已经存储在我的网络应用服务器上的iPhone的生产令牌。
>我100%一定要通过我的php页面给Apple Server的正确消息(用于开发和生产)。
> php页面始终返回Apple Server的成功消息(用于开发和生产)。

以下是我在Xcode上签名的应用程序:

以下是发送通知的php页面的代码:

$ctx = stream_context_create();

    //stream_context_set_option($ctx,'ssl','passphrase','development_pwd');
    //stream_context_set_option($ctx,'local_cert','ck_development.pem');
    //$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195',$err,$errstr,60,STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT,$ctx); //test

    stream_context_set_option($ctx,'production_pwd');
    stream_context_set_option($ctx,'ck_production.pem');
    $fp = stream_socket_client('ssl://gateway.push.apple.com:2195',$ctx); //production

    echo "<p>Connection Open</p>";
    if(!$fp){
        echo "<p>Failed to connect!<br />Error Number: " . $err . " <br />Code: " . $errstrn . "</p>";
        return;
    } else {
        echo "<p>Sending notification!</p>";    
    }

    $i = 0;

    foreach ($deviceToken as $dt) {
        $dt = str_replace(' ','',$dt);
        $msg = chr(0) . pack('n',32) . pack('H*',$dt) . pack('n',strlen($payload)) . $payload;
        echo "<p>" . $i . " - Message sent: " . $payload . "<br />Token: ". $dt . "<br />***" . $msg . "***</p>";
        $result = fwrite($fp,$msg,strlen($msg));
        $i++;
        if (!$result)
            echo '<p>Message not delivered ' . PHP_EOL . '!</p>';
        else
            echo '<p>Message successfully delivered ' . PHP_EOL . '!</p>';
    }
    fclose($fp);
    echo "<p>Total Notifications Sent: " . $i . "</p>";
    echo "<p>Connection Closed!</p>";
}
?>

结论:
我的PC上有测试应用程序接收APNS推送通知。
我在App Store上发布了并不接收APNS推送通知的完全相同的应用程序。

我真的做了一切我的力量来解决这个问题,并阅读了几千页的论坛,stackoverflow和苹果文档。

我愿意报复你们谁帮助我找到我的问题的解决方案!

解决方法

您提到的链接是Sandbox APNS链接。生产APNS链接是根据Apple documentation是:

You access the production environment at gateway.push.apple.com,
outbound TCP port 2195.

几件事要验证:

>您的AppId已启用分发APNS。>您已创建分发APNS SSL证书,并安装在您的构建机器上(适用于App Store提交)。>您已在服务器上的步骤2中安装了SSL证书。>使用开发APNS SSL证书不是错误的。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读