注册推送通知的常用方法是在Appdelegate中添加以下代码。
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationType)(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];
如果没有互联网连接会怎么样?当互联网连接恢复时,应用程序是否会尝试自动注册推送通知?
在注册推送通知之前,是否有必要检查互联网连接和已注册的状况,如下所示
if ([wifiConnection wifiConnectivity]){
if (![[NSUserDefaults standardUserDefaults] stringForKey:@"MyAppSpecificGloballyUniqueString"]) {
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationType)(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];
}
}
此外,如果我们将此添加到应用程序变为活动状态 - 它将按预期工作,我希望。
请确认。
答案 0 :(得分:1)
如果没有WIFI或网络,则不会调用寄存器回调,因此在调用寄存器方法之前无需检查连接。
据我所知,如果您在调用registerForRemoteNotificationTypes:
时没有WIFI或蜂窝连接,但连接回来了,那么此时将调用您的委托方法application:didRegisterForRemoteNotificationsWithDeviceToken:
。
关于第二点,您必须在每次启动应用程序时注册设备令牌。 仔细阅读关于推送通知的Apple指南,它有很好的记录: https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1
应用程序应在每次启动时进行注册,并向其提供者提供当前令牌
每次启动应用程序时,通过请求设备令牌并将其传递给提供程序,可以帮助确保提供程序具有设备的当前令牌。如果用户将备份还原到创建备份的设备或计算机以外的设备或计算机(例如,用户将数据迁移到新设备或计算机),则他或她必须至少启动一次应用程序再次收到通知。如果用户将备份数据还原到新设备或计算机,或重新安装操作系统,则设备令牌会更改。此外,永远不要缓存设备令牌并将其提供给您的提供商;始终在需要时从系统获取令牌。如果您的应用程序先前已注册,则调用registerForRemoteNotificationTypes:会导致操作系统立即将设备令牌传递给代理,而不会产生额外的开销。
您应该在applicationDidFinishLaunching:
注册该设备,无需在didBecomeActive
中调用该设备,在这种情况下令牌不会更改。