38

关于 didRegisterForRemoteNotificationsWithDeviceToken 有很多问题,但它们都回避了一个非常直接的问题,我似乎无法找到确切的答案。

对于以所有其他方式正确设置通知并具有适当网络连接的应用程序:何时调用 didRegisterForRemoteNotificationsWithDeviceToken?一些可能的选择可能是:

  1. 每次应用启动时
  2. 只有在初始提示用户接受推送通知之后
  3. 还有什么?
4

3 回答 3

34

在您的 UIApplication 中调用此方法后,应用程序委托将在成功注册远程通知后调用该方法:

(void)registerForRemoteNotificationTypes:(UIRemoteNotificationType)types

根据:http: //developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference/Reference.html

当您发送此消息时,设备将启动 Apple 推送服务的注册过程。如果成功,则应用程序委托在application:didRegisterForRemoteNotificationsWithDeviceToken:方法中接收到一个设备令牌;如果注册不成功,则通过application:didFailToRegisterForRemoteNotificationsWithError:方法通知委托。如果应用程序委托接收到设备令牌,它应该与其提供者连接并将令牌传递给它。

现在,为了进一步详细说明,通常应用程序会在您的应用程序委托中调用您的didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中的registerForRemoteNotificationTypes 。因此,application:didRegisterForRemoteNotificationsWithDeviceToken通常在应用程序启动后立即被调用。

编辑:应用程序:didRegisterForRemoteNotificationsWithDeviceToken 在第一次之后仍然会被调用以进行后续注册。

于 2012-06-12T00:58:50.083 回答
11

当应用程序首次运行时,它会询问用户是否允许远程通知。如果他们说是,那么它会在那个时候触发 didRegisterForRemoteNotificationsWithDeviceToken 并且每次在第一次打开应用程序时都会触发这个函数。如果他们说不,那么除非他们进入设置并允许应用程序上的通知,否则它不会被解雇。

于 2012-06-11T17:56:30.453 回答
2

可能有很多原因,检查一些原因

  • 如果您在模拟器中运行应用程序,则不会调用 application:didFailToRegisterForRemoteNotificationsWithError: 方法,因为模拟器中不支持使用设备令牌的推送通知。您仍然可以使用向您的模拟器发送推送通知xcrun simctl push <device> com.example.my-app ExamplePush.apns"

  • 如果没有连接,请检查您的设备互联网连接。

有关更多信息,请查看链接

于 2014-01-02T07:24:34.707 回答