从不调用iOS设备令牌回调

时间:2012-06-03 20:53:03

标签: ios xcode

我试图在我的应用程序中提取设备令牌时遇到了一些重大的麻烦。到目前为止,我有

- (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回调中有一个额外的冒号......

2 个答案:

答案 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 

注意第二个错误版本的额外冒号......愚蠢的错误。

故事的道德:小心复制和粘贴:)