2016-11-09 1 views
8

Après Apple a changé la APNs Auth clé de p8, les bibliothèques actuelles telles que https://github.com/immobiliare/ApnsPHP utilisent encore les anciens fichiers de GDP et cert pour se connecterComment se connecter à apn avec PHP en utilisant le fichier clé p8 auth

$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() 

Avec nœud. exemple js (https://eladnava.com/send-push-notifications-to-ios-devices-using-xcode-8-and-swift-3/), je pourrais envoyer comme ceci:

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 
}); 

Comment puis-je utiliser PHP pour envoyer des notifications à distance à iOS comme je le fais dans Node.js?

+0

Avez-vous une solution? :) – Maximus1809

+0

@ Maximus1809 pas encore :) – mehmetsen80

+0

Je cherche un moyen de faire cela aussi, on dirait que je vais devoir faire une solution –

Répondre

-1

Désolé d'être si tard au jeu. Si je comprends bien votre question, je crois que c'est ce que vous cherchez. C'est ce que j'utilise pour envoyer des messages à Apple APNS en utilisant PHP. Vous devrez peut-être faire des recherches sur la charge utile car il existe plusieurs façons de la structurer en fonction de la façon dont vous avez codé votre application. Aussi, gardez à l'esprit que vous devez être en mesure d'utiliser le port 2195 pour que cela fonctionne. Si vous utilisez un serveur dédié ou interne, cela devrait fonctionner. Si c'est un serveur partagé cela ne fonctionnera pas.

$passphrase = 'xxxxx'; // This is the passphrase used for file ck.pem 
    $ctx = stream_context_create(); 
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); // ck.pem file must be included to sent token to ios devices 
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 
    stream_context_set_option($ctx, 'ssl', 'verify_peer', true); 
    stream_context_set_option($ctx, 'ssl', 'allow_self_signed', true); 
    $fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx); 
    stream_set_blocking ($fp, 0); // Ensure that blocking is disabled 

    if (!$fp) { 
     $fds = "Failed to connect: $err $errstr" . PHP_EOL; 
     return false; 
    } else { 

     // Create the payload body 
     // this example uses a custom data payload. depending on your app you may need to change this 
     $body['aps'] = array('alert' => $message, 'sound' => 'default', 'badge' => 1); 
     // Encode the payload as JSON 
     $payload = json_encode($body); 
     // Build the binary notification 
     $msg = chr(0) . pack('n', 32) . pack('H*', str_replace(' ', '',$token)) . pack('n', strlen($payload)) . $payload; 
     // Send it to the server 
     $result = fwrite($fp, $msg, strlen($msg)); 
     // Close the connection to the server 
     fclose($fp); 
    }