2011-10-12 105 views
15

你好,我是iPhone的新手。Adhoc发布推送通知问题

我正在使用开发环境成功接收推送通知的Iphone应用程序,但未在adhoc分发中收到通知。

我有两个证书,即开发&生产。

谁能告诉我我错过了什么?

回答

43

正如我昨天张贴的回答同样的问题:(prev. answer

我有类似的问题。做一些测试后,我得出了以下结论:

  1. 如果应用程序(即与development provision profile编译)安装比这样的设备有development token,你应该使用development certificate发送推到这样的设备。

  2. 如果应用程序(即用distribution provision profile编译)安装比这样的设备有production token,你应该使用production certificate发送推到这样的设备。

而且,如果您的应用尚未发布,我认为APNS不会接受production certificate,那么可能是你将无法发送推送到您的ad-hoc应用。

你可以做什么?例如,发送应用程序给你的测试人员,编译development certificate

更新: 我学会了这个问题,一个更多的时间,发现了一些有趣的信息:

  1. 下载您Ad-hoc provision profile
  2. 从文本编辑器打开配置文件。
  3. 搜索行 <key>aps-environment</key> <string>production</string>
  4. 检查密钥的值aps-environment。是否等于production?
  5. 如果是,那么您应该发送到production certificate的临时应用推送通知。

    如果该值为development那么您应该发送到您的特设应用推送通知development certificate

  6. 现在打开iOS Provisioning Portal - >App IDs。选择你的应用。
  7. 检查是否启用了Production Push SSL Certificate

如果这没有帮助你,那么尝试更新你的专用配置文件。

+0

我觉得你不符合我所说清楚后,它为发展概况,但不是即兴distribution.I也是用'pushmebaby'应用产生notification.Thanks –

+0

我清楚地理解你。阅读我的第二点:2.如果您的应用程序未在AppStore中发布,我不确定您是否可以使用生产证书。 – Nekto

+0

我也测试了开发证书和adhoc ditribution配置文件,但它仍然没有显示任何东西。 –

1

推送通知有时会令人头疼,并且由许多元素组成。如果你错过了某些事情,你的PNS将无法正常工作,并且很难理解为什么。根据经验法则,查看以下清单:
- 使用正确的App ID(配置配置文件附加到的同一个ID)正确生成推送证书和私钥。
- 证书和私钥都来自同一个下载的PNS证书。
- 两个文件都正确连接到一个.pem文件中。
- 应用程序处于活动状态时,您的应用程序会在推送通知进入时处理这些通知。

在任何情况下,我建议遵循一个很好的教程,如这样:http://mobiforge.com/developing/story/programming-apple-push-notification-services wordfor word。祝你好运!

+0

感谢教程,我遵循了所有的步骤。我不需要.pem文件,因为我使用只需要证书的'pushmebaby'应用程序。 –

0

据我所知,你不能发送通知到具有开发证书的Ad Hoc构建。正如你可以想象这种情况是好的,直到你发布的应用程序。一旦应用程序发布发送通知到包含制作的特设版本,Cert也会将它们发送给您的应用程序持有者。我得到的方式是:

  1. 在苹果中创建一个新的应用程序,它与iTunes中的应用程序具有相同的基线。
  2. 为此“幻影”应用程序创建新的生产密钥和证书。
  3. 使用新的生产密钥构建新应用程序并使用该构建进行测试。

现在你将有一个应用程序,你可以构建专门测试通知。不是一个优雅的解决方案,但它工作

+0

不知道为什么这是downvoted,创建一个单独的捆绑是一个合法的机制与平台,如HockeyApp的beta测试。 – Leon

1

我遇到了同样的事情,花了相当一段时间试图找出答案。我生成了一个新的生产证书,创建了Ad-Hoc供应配置文件(这样我就可以通过生产中的推送通知进行测试),而且根本没有任何工作。

我相应地固定了推送脚本(服务器端)(使用新生成的.pem文件并连接到ssl://gateway.push.apple.com:2195)。该脚本告诉我,通知已交付,但我的设备实际上并没有得到它。

原来这个问题真的很无聊!显然,当使用新证书(或通过Ad-Hoc)使用应用程序时,设备令牌会发生变化。我只能推测他们为什么改变的原因,但我所知道的是,一旦我抓住正确的标记并使用我的测试脚本向设备发送通知,我就知道了!

+0

+1。我还必须使用ssl://gateway.push.apple.com:2195(需要删除沙箱),并且必须使用设备令牌来获取生产证书。 – Geek

0

我刚刚克服了一个非常类似的问题,事实证明这可能应该是显而易见的,但我会在这里发布它,以防万一其他人与我一样愚蠢。

我正在使用MoonAPNS,可能会收到开发通知但不能生产。 后的兜兜转转好几天我回到这一行:

PushNotification push = new PushNotification(true, p12file, p12password); 

以前有忽视true参数,通过服务器代码调试显示这是设定是否使用沙盒服务器 - d”哦!切换到false,一切都很好。

道德故事:不要忘记在非沙盒服务器上指出您的通知!

1

除了从Nekto猜测...

而且,如果您的应用尚未发布,我认为APNS将不接受生产许可证,所以也许你将无法发送推送到您的专门应用程序。

与此同时,我可以确认即使应用程序尚未发布,也可以在即席应用程序上接收推送通知。

0

我得到了同样的问题,经过大量的睾丸后,我终于得到了什么问题。

这是因为苹果生产apns服务器不允许包含私钥数据的P12文件。但是,如果包含私钥,开发apns服务器将接受P12文件。

因此,当您从Keychain导出P12文件时,只需选择没有私钥的生产证书文件,即可在您的adhoc应用程序中获得通知(即使未发布)。

1

在测试推送到开发环境时,应该记住一个严格的清单。他们中的大多数已经在上面提到。但这是解决我的问题的一件事,我想分享一下。我希望它能帮助别人。也就是:

请注意设备令牌ID,这是不同的开发& &生产环境。

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
     NSString *deviceTokenStr = [[[[deviceToken description] 
             stringByReplacingOccurrencesOfString: @"<" withString: @""] 
            stringByReplacingOccurrencesOfString: @">" withString: @""] 
            stringByReplacingOccurrencesOfString: @" " withString: @""]; 
     UIAlertView *alert= [[UIAlertView alloc]initWithTitle:deviceTokenStr message:Nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
     [alert show]; 
}