iOS:如何注册推送通知?

我试图通过Ray Wenderlich的指南为我的iOS 5应用程序实现推送通知: http ://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12。

我在我的AppDelegate中将下面的代码插入到我的didFinishLaunchingWithOptions方法中:

 [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; 

在我的设备(不是模拟器)上运行应用程序时,不会显示popup窗口/警告,告诉我接受推送通知。 我已经插入了一个debugging点,我可以看到, registerForRemoteNotificationTypes被调用。

为什么没有发生?

也许,删除你的应用程序,然后重试。 该对话框只出现一次。 但是我不确定那个对话框是否会在你重新安装那个应用时再次出现。

你也可以去你的设置应用程序通知中心,看看你的应用程序是否在列表中。

你也可以添加一个断点,看看是否执行了didRegisterForRemoteNotificationsWithDeviceToken。

我有这个确切的问题(相同的教程不less),并发现我用错误的configuration文件签署的代码。

具体来说,我只启用了我的应用程序的“生产”推送通知(因为我不想让证书两次等),但我在Xcode中的生成设置使用“iPhone开发”作为“发行”的默认“代码签名身份”而不是“iPhone分发”,因为它应该是。 这似乎是我的testing应用程序的默认设置。

希望我能阻止别人在同一个问题上浪费时间。

从iOS 8有这个新的方法。 直接从UIApplication.h

 - (void)registerForRemoteNotifications NS_AVAILABLE_IOS(8_0); 

调用此方法将导致application:didRegisterForRemoteNotificationsWithDeviceToken:application:didFailToRegisterForRemoteNotificationsWithError:在应用程序委托上被调用。

注意:只有当应用程序成功注册了用户通知registerUserNotificationSettings: ,或者为后台应用程序刷新启用了这些callback。