如何以及如何从服务器发送到APN,以便将通知发送到设备



我是iOS开发人员,我被问到击中APN的请求的类型(整个标题和正文)以获取通知到设备。

我阅读了许多用于APN的服务器设置的教程,但是由于我对PHP和Node JS不了解,因此我无法理解。阅读Apple文档后,我知道它使用了HTTP/2以及其他各种标签和值。但是我无法构建完整的请求。任何帮助将受到高度赞赏。

我们只使用普通卷曲来执行http2请求

先决条件:您有一个有效的SSL证书转换为开发人员控制台的.pem

/usr/local/Cellar/curl/7.50.0/bin/curl -v 
-d '{"aps":{"alert":"Hello","content-available": 1, "sound": ""}}' 
-H "apns-topic: com.yourapp.bundleid" 
-H "apns-expiration: 1" 
-H "apns-priority: 10" 
--http2 
--cert /Users/PATHTOPEM/key.pem:YOURPASSWORD 
https://api.push.apple.com/3/device/YOURDEVICETOKEN

,或者如果您谨慎使用终端尝试此MacOS应用程序发送推送通知,则非常简单。

先决条件:您需要在钥匙扣中拥有证书签名授权和私人SSL证书。

https://github.com/noodlewerk/nwpusher

要使用PHP发送APNS请求,您需要以下要求:

  1. .pem证书应在您的PHP脚本的相同路径中存在。
  2. 设备令牌,将通知发送到特定设备所需的设备令牌。

然后您可以尝试以下代码:

<?php
    $apnsServer = 'ssl://gateway.push.apple.com:2195';
    $privateKeyPassword = '1234'; // your .pem private key password
    $message = 'Hello world!';
    $deviceToken = 'YOUR_DEVICE_TOKEN_HERE';
    $pushCertAndKeyPemFile = 'PushCertificateAndKey.pem'; // Your .pem certificate
    $stream = stream_context_create();
    stream_context_set_option($stream,
    'ssl',
    'passphrase',
    $privateKeyPassword);
    stream_context_set_option($stream,
    'ssl',
    'local_cert',
    $pushCertAndKeyPemFile);
    $connectionTimeout = 20;
    $connectionType = STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT;
    $connection = stream_socket_client($apnsServer,
    $errorNumber,
    $errorString,
    $connectionTimeout,
    $connectionType,
    $stream);
    if (!$connection){
    echo "Failed to connect to the APNS server. Error no = $errorNumber<br/>";
    exit;
    } else {
    echo "Successfully connected to the APNS...";
    }
    $messageBody['aps'] = array('alert' => $message,
    'sound' => 'default',
    'badge' => 2,
    );
    $payload = json_encode($messageBody);
    $notification = chr(0) .
    pack('n', 32) .
    pack('H*', $deviceToken) .
    pack('n', strlen($payload)) .
    $payload;
    $wroteSuccessfully = fwrite($connection, $notification, strlen($notification));
    if (!$wroteSuccessfully){
    echo "Could not send the message.";
    }
    else {
    echo "Successfully sent the message.";
    }
    fclose($connection);
?>

请参阅此链接以获取更多详细信息。

相关内容

  • 没有找到相关文章

最新更新