Apple Push Notification Service APNS - Notificatio

2019-02-05 03:34发布

问题:

I am trying to add push notifications to my app. I have am using an ad hoc profile. My appID does not have a wildcard. I am using the following php code...

$deviceToken="****";masked
$time = time();

 $apnsHost = 'gateway.sandbox.push.apple.com'; 

$apnsPort = 2195;
$apnsCert = 'apns-dev-maui.pem';

$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);

$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
if($apns)
{
echo "Connection Established<br/>";
$payload = array();
$payload['aps'] = array('alert' => 'It works!!', 'badge' => 1, 'sound' => 'default');
$payload = json_encode($payload);
$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;

        print "sending message :" . $apnsMessage . "<br/>";
        print "sending payload :" . $payload . "<br/>";
        fwrite($apns, $apnsMessage);

}
else
{       
        echo "Connection Failed";
        echo $errorString;
        echo $error;
}
// socket_close($apns);
fclose($apns);

No connection errors are generated. Nothing seems to be coming from the feedback channel.

I got the deviceTokens from the organizer console and an NSLog command. The notifications for this app are showing up in my settings menu.

I have an ATT 3G and an old 2G that I use as an iPod. Neither work.

With no errors to look at, I am out of ideas. Anyone have any insight?

Jennifer

回答1:

I finally figured it out. I was using Sandbox with an AdHoc provisioning profile. Ad Hoc is apparently considered production instead of development. I created the push production certificate, installed it and voila! It works.



回答2:

Mups answer is right. I wanted to add an addition situation that had the same problem (in case its helpful to anyone else). I had push setup and it was working on exactly 1 iphone (not the others). This was very puzzling. The issue was that the 1 iphone that worked had a 'debug' version of the program installed, where the others had an 'ad hoc' version installed. Our APNS server was setup to use the 'development' certificate and gateway.sandbox.push.apple.com

I changed the certificate on the server to a 'production' certificate and the host to gateway.push.apple.com

(then deleted all the provisioning profiles on all the devices, and installed 'ad hoc' version of the program)

And we were good to go.