After Apple changed the APNs Auth Key to p8, the current libraries such as https://github.com/immobiliare/ApnsPHP still use old pem and cert files to connect
$push = new ApnsPHP_Push(
ApnsPHP_Abstract::ENVIRONMENT_SANDBOX,
'server_certificates_bundle_sandbox.pem'
);
// Set the Provider Certificate passphrase
// $push->setProviderCertificatePassphrase('test');
// Set the Root Certificate Autority to verify the Apple remote peer
$push->setRootCertificationAuthority('entrust_root_certification_authority.pem');
// Connect to the Apple Push Notification Service
$push->connect()
With Node.js example (https://eladnava.com/send-push-notifications-to-ios-devices-using-xcode-8-and-swift-3/), I could send like this:
var apnProvider = new apn.Provider({
token: {
key: 'APNsAuthKey_Q34DLF6Z6J.p8', // Path to the key p8 file
keyId: 'Q34DLF6Z6J', // The Key ID of the p8 file (available at https://developer.apple.com/account/ios/certificate/key)
teamId: 'RLAHF6FL89', // The Team ID of your Apple Developer Account (available at https://developer.apple.com/account/#/membership/)
},
production: false // Set to true if sending a notification to a production iOS app
});
How can I use PHP to send remote notifications to iOS like I do in node.js?
[1] To begin, visit the Apple Developer Member Center and log in with your credentials. [2] Click Certificates, Identifiers & Profiles. [3] Click Keys then the “+” button in the top right corner to create a new key. [4] Enter a descriptive name for your APNS Auth Key, then select Apple Push Notification Service (APNs).
p8 file contains the PRIVATE KEY that is used to SIGN the JWT content for APNS messages. The file itself is a pure text file, the KEY inside is formatted in PEM format. The part between the -----BEGIN PRIVATE KEY----- and -----END PRIVATE KEY----- is a base64 formatted ASN.
p8 key file, go to Apple developer account page , then select Certificates, IDs & Profiles. Next, select Keys. Click the “+” button to add a new key. In the new key page, type in your key name and check the Apple Push Notification service (APNs) box , then click “Continue” and click “Register'.
p8 files are keys used to create tokens, and those . p12 files are used as certificates? authentication.
Maybe its too late but I had struggle with this because almost every instruction is for the old way.
So i decided to answer this "old" question with my solution.
private static function sendNotificationAPN($device_token, $title, $body, $category, $sound, $optionals) {
$alert = array(
'aps' => array(
'alert' => array(
'title' => $title,
'body' => $body
),
'badge' => 0,
'sound' => $sound,
'category' => $category,
'content-available' => true
)
);
foreach ($optionals as $key => $option) {
$alert[$key] = $option;
}
$alert = json_encode($alert);
$url = 'https://api.development.push.apple.com/3/device/' . $device_token['apn'];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $alert);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("apns-topic: '/* your app name */'"));
curl_setopt($ch, CURLOPT_SSLCERT, /* absolute path to cert file */);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, /* passphrase for cert */);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$response = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$ret = array(
'body' => $response,
'httpcode' => $httpcode
);
return $ret;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With