iPhone iOS推送通知apns生产不发送

我一直在这个工作了一段时间。 我知道那里有很多文章,并且已经学到了很多东西。

我以同样的方式创build了我的开发和生产SSL。 开发连接到ssl://gateway.sandbox.push.apple.com:2195生产连接到ssl://gateway.push.apple.com:2195连接似乎工作正常。

至于应用程序。 开发:当我从xCode直接运行到我的设备上时,它运行开发版本。 该应用程序成功地将开发令牌logging在数据库中。 然后我运行一个服务来发送推送通知,并正确传递。 味精成功交付。

Ad-hoc:当我构build一个档案并将其导出为Ad-hoc发行版时,我仔细检查包内容codesign -dvvvv --entitlements - Elepago.app并查看aps-environment已正确设置为生产。 我将它打包并通过iTunes加载到我的设备上。 当应用程序启动时,我看到数据库中logging了新的生产令牌。 所以环境必须正确设置。 当我将推送通知发送到生产密钥(与开发完全相同,只是更改SSL .pem密钥和服务器)时,它表示已成功交付。 然而它从来没有真正到达设备!

这个问题让我疯狂。 我刚刚通过并清理了我的分销证书,并使用全新的CSR进行了重build。 我还更新了所有configuration文件以使用该新证书。 [关于这些证书如何与应用程序绑定的任何想法,除了我已经检查过的aps-environment的东西外。

任何有识之士将不胜感激。

所以经过几个小时的头痛,我最终重build了SSL .pem文件,它工作了!

以下是我所做的:

  • 擦干净我的发行证书,并创build一个新的
  • 将所有供应configuration文件关联到新证书
  • 在xCode中加载了新的configuration文件
  • 重build我的SSL握手.pem文件按照Raywenderlich的令人敬畏的教程的指示

这些是我原来在开发和生产中所遵循的指令,但也许/显然是搞砸了。 然后我testing了我的ad-hoc版本,它工作!

另外,值得注意的是,当使用错误的.pem键时,我没有收到来自APNS的任何错误反馈。 我使用上面链接中的simplepush.php文件作为发送PN的基础。

开发和生产的设备令牌不一样。

当您正在testing生产时,使用UIAlertView查看生产的令牌。 做如下的事情:

 - (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]; } 

使用此令牌推送生产通知。

  • 任何内部分发configuration文件都会给出相同的tokenID,但这种tokenID在不同设备之间的差异如何。
  • 其他唯一的问题可能只与ProductionURL。
  • 我还注意到,推送通知接收有时会延迟,大部分是与生产URL一起使用的。

希望这可以帮助。

当我在Java上开发时,我的问题是一样的但是我解决了这个问题,因为生产=真是生产和生产=虚假的发展。

有效载荷(有效载荷,密钥库,密码,生产,设备)

希望这个帮助。