Reputation: 1073
I created an App to send remote notifications from a web server. When I tested the App in Development Mode all the notifications arrived correctly on the phone, after the AppStore release the app did not receive notifications anymore.
Here it is what I did:
Here it is what i tested:
Here is how I sign the app on Xcode:
Here is the code of the php page to send notifications:
$ctx = stream_context_create();
//stream_context_set_option($ctx, 'ssl', 'passphrase', 'development_pwd');
//stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck_development.pem');
//$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); //test
stream_context_set_option($ctx, 'ssl', 'passphrase', 'production_pwd');
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck_production.pem');
$fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); //production
echo "<p>Connection Open</p>";
if(!$fp){
echo "<p>Failed to connect!<br />Error Number: " . $err . " <br />Code: " . $errstrn . "</p>";
return;
} else {
echo "<p>Sending notification!</p>";
}
$i = 0;
foreach ($deviceToken as $dt) {
$dt = str_replace(' ' , '' , $dt);
$msg = chr(0) . pack('n',32) . pack('H*', $dt) . pack('n',strlen($payload)) . $payload;
echo "<p>" . $i . " - Message sent: " . $payload . "<br />Token: ". $dt . "<br />***" . $msg . "***</p>";
$result = fwrite($fp, $msg, strlen($msg));
$i++;
if (!$result)
echo '<p>Message not delivered ' . PHP_EOL . '!</p>';
else
echo '<p>Message successfully delivered ' . PHP_EOL . '!</p>';
}
fclose($fp);
echo "<p>Total Notifications Sent: " . $i . "</p>";
echo "<p>Connection Closed!</p>";
}
?>
Conclusions: I have the Test App on my PC that receive APNS Push Notifications. I have the exactly same app released on App Store that not receive APNS Push Notifications.
I realy made everything in my power to fix this issue and read about thousand pages of forums, stackoverflow and Apple Documentations.
I'm willing to retribuite everyone of you who helps me find the solution to my issue!
Upvotes: 26
Views: 24210
Reputation: 149
If you work with the Google Firebase Cloud Messaging means, Kindly check
Make sure with your server team, your server is changed from development to production mode.
Your production APN's certificate(convert into .p12 file) is uploaded on Google Firebase or not.
Make sure the .p12 file is not exported with the key from the Keychain access. (like this)
If it is uploaded already, then check the production APN's certificate's expiry date. Google FCM rejects the certificates before 2 months from the expiry date of the production APN's certificate.
Upvotes: 2
Reputation: 164
I Just came across the same problem. Push Notifications are arriving in Development Mode, not in Production. I also checked everything a few times and was sure that everything was fine.
But it wasn't. It was the very first step in the process. Creating the csr. I was sure I didn't have to create a csr file for Development and Production and ended up using the same csr file for both certificats. Didn't work...
Maybe someone in future does the same mistake und saves some time now.
Upvotes: 3
Reputation: 351
Device token for Production and Sandbox are different for same device.
So try getting device token by using Adhoc or Distribution certificates and use the generated token on production, this worked for me.
Upvotes: 14
Reputation: 4244
The link you mentioned is Sandbox APNS link. Production APNS link is as per Apple documentation is:
You access the production environment at gateway.push.apple.com, outbound TCP port 2195.
Few things to verify:
Upvotes: 18