使用API​​的APNS通知无效

时间:2017-07-28 12:50:49

标签: php curl apple-push-notifications

我尝试使用CURL执行API APNS。代码如下

$pem_file       =  'public/assets/pem/test.pem';
$pem_secret     = '';
$apns_topic     = 'com.test.demo';
if(defined('CURL_HTTP_VERSION_2_0'))
{
   $devicetoken=['54688ae0e1ecc3bc0d517521f4935c014342ecca792ef798f0e63652a4620ed4','de963dfbc03f5de416c7d806e04a6f3276716f246942fa2a61cffa393a780120','a08832de8b72567aa487beefe50e4e29caaa4a51ab14706fc8f0ef9df1f6b9c4','48335901c12bf02a03cef453d2e7739eaac9779991cafef3fa70ffe587ea3f12'];

$sample_alert = '{"aps":{"alert":"hi","sound":"default"}}';
   foreach($devicetoken as $device_token)
   {
    $url = "https://api.development.push.apple.com/3/device/$device_token";

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $sample_alert);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("apns-topic: $apns_topic"));
    curl_setopt($ch, CURLOPT_SSLCERT, $pem_file);
    curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $pem_secret);
    $response = curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

//On successful response you should get true in the response and a status code of 200
     var_dump($response);echo "----";var_dump($httpcode);
    }
}
else{
   echo"NOt a supported version";
}

我得到的结果是:

  �@@uUnexpected HTTP/1.x request: POST /3/device/54688ae0e1ecc3bc0d517521f4935c014342ecca792ef798f0e63652a4620ed4 bool(true) ----int(0)

我正在尝试这种方法来处理无效的设备令牌。早期我尝试使用PHP这样的链接(http://learn-php-by-example.blogspot.in/2013/01/working-with-apple-push-notification.html)ssl,因为当数据库中存在无效的设备令牌并且当我们通过它时循环推送通知停止工作。所以我正在尝试API方法。

提前感谢您的回复人员

3 个答案:

答案 0 :(得分:1)

对于新的HTTP / 2 APNS提供程序API,您可以使用curl发送推送通知:New APNS Provider API and PHP

答案 1 :(得分:0)

首先确保您的cURL版本支持HTTP / 2(您必须使用此编译cURL,默认情况下它不处于活动状态。)

然后确保cURL使用的是OpenSSL v1.0.2或更高版本。

答案 2 :(得分:0)

请在您的php curl程序包中启用http2

如果您尚未启用http2对curl的支持,也请参见phpinfo()

之后,只需将CURLOPT_HTTP_VERSION的curl选项设置为3

Generate a device-specific set of APKs