关于 didRegisterForRemoteNotificationsWithDeviceToken 有很多问题,但它们都回避了一个非常直接的问题,我似乎无法找到确切的答案。
对于以所有其他方式正确设置通知并具有适当网络连接的应用程序:何时调用 didRegisterForRemoteNotificationsWithDeviceToken?一些可能的选择可能是:
- 每次应用启动时
- 只有在初始提示用户接受推送通知之后
- 还有什么?
关于 didRegisterForRemoteNotificationsWithDeviceToken 有很多问题,但它们都回避了一个非常直接的问题,我似乎无法找到确切的答案。
对于以所有其他方式正确设置通知并具有适当网络连接的应用程序:何时调用 didRegisterForRemoteNotificationsWithDeviceToken?一些可能的选择可能是:
在您的 UIApplication 中调用此方法后,应用程序委托将在成功注册远程通知后调用该方法:
(void)registerForRemoteNotificationTypes:(UIRemoteNotificationType)types
当您发送此消息时,设备将启动 Apple 推送服务的注册过程。如果成功,则应用程序委托在application:didRegisterForRemoteNotificationsWithDeviceToken:方法中接收到一个设备令牌;如果注册不成功,则通过application:didFailToRegisterForRemoteNotificationsWithError:方法通知委托。如果应用程序委托接收到设备令牌,它应该与其提供者连接并将令牌传递给它。
现在,为了进一步详细说明,通常应用程序会在您的应用程序委托中调用您的didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中的registerForRemoteNotificationTypes 。因此,application:didRegisterForRemoteNotificationsWithDeviceToken通常在应用程序启动后立即被调用。
编辑:应用程序:didRegisterForRemoteNotificationsWithDeviceToken 在第一次之后仍然会被调用以进行后续注册。
当应用程序首次运行时,它会询问用户是否允许远程通知。如果他们说是,那么它会在那个时候触发 didRegisterForRemoteNotificationsWithDeviceToken 并且每次在第一次打开应用程序时都会触发这个函数。如果他们说不,那么除非他们进入设置并允许应用程序上的通知,否则它不会被解雇。
可能有很多原因,检查一些原因
如果您在模拟器中运行应用程序,则不会调用 application:didFailToRegisterForRemoteNotificationsWithError: 方法,因为模拟器中不支持使用设备令牌的推送通知。您仍然可以使用向您的模拟器发送推送通知xcrun simctl push <device> com.example.my-app ExamplePush.apns"
如果没有连接,请检查您的设备互联网连接。
有关更多信息,请查看链接