我试图在我的应用程序中提取设备令牌时遇到了一些重大的麻烦。到目前为止,我有
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//register for push notifications
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
然后
-(void)application:(UIApplication *)app didRegisterForRemoteNotificationsWith:DeviceToken:(NSData *)deviceToken
{
NSString *str = [deviceToken description];
NSLog(@"%@", str);
}
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
NSLog(@"Failed to get token, error: %@", error);
}
这是交易。
我的iOS模拟器:我得到了
Failed to get token, error: Error Domain=NSCocoaErrorDomain Code=3010 "remote notifications are not supported in the simulator" UserInfo=0x5813d20 {NSLocalizedDescription=remote notifications are not supported in the simulator}
正如所料。
在我的iPod Touch,第二代,运行iOS 4.2时,都没有调用任何回调。运行iOS 5.1.1的同事iPhone 4s也是如此。
最后,在运行iOS.5.1.1的另一个同事iPhone 4上,似乎返回设备令牌是“com.apple.mobileconfig”......这很奇怪。
我已验证我的设备上的应用已启用通知。我还验证了我的应用程序标识符包在xCode中正确设置。
编辑:我不知道发生了什么事,但是,发布此线程几天后,我插入的iPhone 4到我的Mac和令牌回调刚刚开始在调试模式下工作的设备,然后在其他人的设备上。我对配置文件进行了一些更改(必须添加新设备的UDID等),这样可能会让它出现故障。不太确定。
EDIT2:似乎在DeviceToken
之前的didRegister回调中有一个额外的冒号......
答案 0 :(得分:2)
来自Technical Note TN2265 Troubleshooting Push Notifications(强调我的):
无代表回调
当安装第一个支持推送的应用程序时,iOS或Mac OS X会尝试与推送服务建立持久的网络连接,该服务将由系统上所有支持推送的应用程序共享。 如果既未调用委托回调
application:didRegisterForRemoteNotificationsWithDeviceToken:
也未application:didFailToRegisterForRemoteNotificationsWithError:
,则表示此连接尚未建立。这不一定是错误情况。系统可能根本没有互联网连接,因为它超出了任何手机信号塔或Wi-Fi接入点的范围,或者它可能位于飞机上模式。您的应用应该正常继续,而不是仅将其视为错误,而是仅停用依赖推送通知的功能。
请注意,网络可用性可能会经常变化。一旦与推送服务的持久连接成功,将调用前面提到的应用程序委托方法之一。
答案 1 :(得分:1)
-(void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
不
-(void)application:(UIApplication *)app didRegisterForRemoteNotificationsWith:DeviceToken:(NSData *)deviceToken
注意第二个错误版本的额外冒号......愚蠢的错误。
故事的道德:小心复制和粘贴:)