iOS: 如何注册推送通知?

11

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

我已将以下内容插入到我的AppDelegate的didFinishLaunchingWithOptions方法中:

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

当我在我的设备上运行应用程序(而不是模拟器)时,要求接受推送通知的弹出框/提示框未显示出来。我在代码中插入了一个调试断点,并可以看到registerForRemoteNotificationTypes 被调用了。

为什么没有任何反应?

3个回答

7
也许你可以删除应用程序并重新尝试。该对话框只会出现一次。但是我不确定当你重新安装该应用程序时是否会再次出现该对话框。
你还可以进入设置应用程序的通知中心,查看您的应用程序是否在列表中。
您还可以添加断点并查看didRegisterForRemoteNotificationsWithDeviceToken是否执行。

我尝试从设备中删除应用程序,但没有成功。该应用程序不在通知中心中。此外,didRegisterForRemoteNotificationsWithDeviceTokendidFailToRegisterForRemoteNotificationsWithError从未被调用。 - dhrm
你设置了正确的Bundle Identifier吗?你正在使用通配符App ID吗? - YuAo
3
谢谢您的回复。问题在于我开启了证书的推送通知后,需要重新生成我的配置文件。 - dhrm
2
我经历了同样的事情并遇到了同样的问题。我认为苹果公司假定程序员也是加密证书方面的专家。此外,永远不要使用通配符ID进行推送服务。 - sudo

3
我曾经遇到过完全相同的问题(甚至使用了同样的教程),后来发现我使用了错误的配置文件签署代码。
具体来说,我只为我的应用启用了“生产”推送通知(因为我不想重复制作证书等),但是在Xcode的构建设置中,“发布”默认的“代码签名标识”是“iPhone Development”,而不是应该使用的“iPhone Distribution”。这似乎是我的测试应用程序的默认设置。
希望我能阻止其他人浪费时间在同样的问题上。

同样的教程,同样的问题。我正在运行调试版本并连接到设备,并且有开发签名标识... 当你说“我只为我的应用启用了‘生产’推送通知”时,能否详细说明一下这是什么意思? - William Entriken

1
从iOS 8开始,有一种新的方法可以实现此功能。直接从UIApplication.h中获取:
- (void)registerForRemoteNotifications NS_AVAILABLE_IOS(8_0);

调用此方法将导致在应用程序委托上调用application:didRegisterForRemoteNotificationsWithDeviceToken:application:didFailToRegisterForRemoteNotificationsWithError:之一。
注意:仅当应用程序成功使用registerUserNotificationSettings:注册用户通知,或启用后台应用程序刷新时,才会进行这些回调。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接