苹果推送通知 - PHP [关闭]

Posted

技术标签:

【中文标题】苹果推送通知 - PHP [关闭]【英文标题】:apple push notification - PHP [closed] 【发布时间】:2014-06-07 08:05:27 【问题描述】:

我在使用推送通知时遇到问题,在我使用开发时它可以工作,但是当我想真正使用它时,它就不起作用了。

ck 是为生产而设计的。

我用的时候结果是:Message successfully delivered但是我的手机收不到消息

<?php

pushNotification('wow2','DeviceToken');

function pushNotification($theMessage, $theDeviceToken)


        // Put your device token here (without spaces):
    $deviceToken = $theDeviceToken;     

    // Put your private key's passphrase here:
    $passphrase = 'Code';

    // Put your alert message here:
    $message = $theMessage;

    ////////////////////////////////////////////////////////////////////////////////

    $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

    // Open a connection to the APNS server
    $fp = stream_socket_client(
        'ssl://gateway.push.apple.com:2195', $err,
        $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

    if (!$fp)
        //exit("Failed to connect: $err $errstr" . PHP_EOL);
    exit("" . PHP_EOL);
    //echo 'Connected to APNS\n' . PHP_EOL;

    // Create the payload body
    $body['aps'] = array(
        'alert' => $message,
        'sound' => 'default'
        );

    // Encode the payload as JSON
    $payload = json_encode($body);

    // Build the binary notification
    $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;

    // Send it to the server
    $result = fwrite($fp, $msg, strlen($msg));

    if (!$result)
        echo 'Message not delivered' . PHP_EOL;
    else
        echo 'Message successfully delivered' . PHP_EOL;

    fclose($fp);



?>      

谁能看出有什么问题? :)

【问题讨论】:

【参考方案1】:

APNS 这里面临 3 种类型的问题

    您的设备令牌不匹配 您的 .pem 不是有效的,原因是 .p12 和 .cer 文件已损坏多次,因此请删除 .p12 文件和 .cer 并重新创建一次。 不是一个值得的答案,但它会碰巧发生 -- 检查您的设备通知是ON/OFF

【讨论】:

你需要一些参考使用这个***.com/questions/22717275/…,***.com/questions/17896979/…【参考方案2】:

我认为您的设备令牌有问题。如果您的服务器中有无效的设备令牌,它将不会收到通知。从服务器中删除无效的设备令牌后,它将起作用。

同样的事情也发生在我身上,花了很长时间才找到解决办法。

【讨论】:

我刚刚和一些朋友一起尝试过,但还是不行:/ @Stof ok 使用苹果开发者控制台登录并检查你的应用程序是否启用了推送通知【参考方案3】:

尝试使用您的设备移动令牌的硬编码设备令牌。

然后在使用之前尝试使用变量或回显设备令牌。

// 将您的设备令牌放在这里(不带空格):

$deviceToken = '0f744707bebcf74f9b7c25d48e3358945f6aa01da5dd43487462c7eaf61bbad78';

【讨论】:

这就是我正在做的:) 然后检查你的ck.pem生成过程并正确上传 我已经用develop to完成了这个,我已经做了好几次检查它是否正确完成 您是否尝试过使用其他设备/手机?并记住接受推送通知对话框 ok。也尝试重新启动您的设备。 是的,尝试所有这些;/

以上是关于苹果推送通知 - PHP [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

苹果手机如何阻止app的推送通知?

苹果iOS推送通知的PHP脚本错误

苹果推送通知问题

苹果手机怎么设置app消息通知

Android可以像苹果推送通知一样使用php吗?

苹果推送通知希伯来语