Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iPhone iOS push notifications apns on production not sending

I've been working on this for a while now. I know there's a ton of articles out there, and have learned a lot about it all.

I have created my development and production SSL's the same way. Development connects to ssl://gateway.sandbox.push.apple.com:2195 Production connects to ssl://gateway.push.apple.com:2195 The connections seem to work fine.

As for the app. Development: When I run it directly on to my device from xCode, it runs the development version. The app successfully records the development token in the database. I then run a service to send a push notification, and it is delivered correctly. The msg is successfully delivered.

Ad-hoc: When I build an archive and export it for Ad-hoc distribution, I double check the package contents codesign -dvvvv --entitlements - Elepago.app and see that the aps-environment is correctly set to production. I package it and load it onto my device through iTunes. When the app starts, I see the new production token recorded in the database. So the environment must be correctly set up. When I send the push notification to the production key (identically the same as development, just changing the SSL .pem key and the server), it says it is successfully delivered. However it never actually reaches the device!!!

This problem is driving me crazy. I just went through and cleaned out my distribution certificate and rebuilt it using a completely new CSR. I also updated all the provisioning profiles to use that new certificate. [Any ideas how these certificates tie into the app, other than for the aps-environment thing which I already check.]

Any insight would be greatly appreciated.

like image 270
Federico Avatar asked Jun 13 '13 19:06

Federico


3 Answers

So after hours and hours of headaches, I ended up rebuilding the SSL .pem file and it worked!!

Here's what I did:

  • wiped clean my distribution certificate and created a new one
  • associated all provisioning profiles to new certificate
  • loaded up new provisioning profiles in xCode
  • rebuilt my SSL handshake .pem file following instructions on Raywenderlich's awesome tutorials

These are the same instructions I had originally followed for development and production, but maybe/apparently messed something up. Then I tested on my ad-hoc version and it worked!!!

Also, its worth noting that when using the wrong .pem key, I was not receiving any error feedback from APNS. I use the simplepush.php file found in the link above as a base to send the PN.

like image 153
Federico Avatar answered Oct 22 '22 09:10

Federico


Device token for Development and Production are not same.

When you are testing for Production use UIAlertView to see your token for Production. Do something like the following:

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    NSString *deviceID = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    deviceID = [deviceID stringByReplacingOccurrencesOfString:@" " withString:@""];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Device Token", nil) message:deviceID delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil];
    [alert show];
}

Use this token to push notification for production.

like image 30
Muhammad Saad Ansari Avatar answered Oct 22 '22 09:10

Muhammad Saad Ansari


  • Any in-house distribution profile gives out a same tokenID, how ever this tokenID varies across different devices.
  • Other only issue could be only with the ProductionURL.
  • I have also notices that the push notification reception is delayed sometimes, mostly when used with production URL.

Hope this helps.

like image 27
thatzprem Avatar answered Oct 22 '22 09:10

thatzprem