2

尝试在我的应用程序中提取设备令牌时,我感到非常难过。到目前为止,我有

- (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}

正如预期的那样。

在我运行 iOS 4.2 的第二代 iPod Touch 上,从来没有调用任何回调。我的同事运行 iOS 5.1.1 的 iPhone 4s 也是如此

最后,在运行 iOS.5.1.1 的另一位同事 iPhone 4 上,似乎返回设备令牌是“com.apple.mobileconfig”......这很奇怪。

我已验证我的设备上的应用程序已启用通知。我还验证了我的应用标识符包在 xCode 中的设置是否正确。

编辑:我不知道发生了什么,但是,在发布这个帖子几天后,我将 iPhone 4 插入我的 mac,设备令牌回调刚刚开始在调试模式下工作,然后也在其他人的设备上工作。我对配置文件进行了一些更改(必须添加新设备的 UDID 等),这样可能会出现一些故障。不太确定。

EDIT2:在 didRegister 回调中似乎有一个额外的冒号,就在DeviceToken...

4

2 回答 2

2

来自技术说明 TN2265 故障排除推送通知(强调我的):

没有委托回调

当安装第一个支持推送的应用程序时,iOS 或 Mac OS X 会尝试与系统上所有支持推送的应用程序共享的推送服务建立持久的网络连接。如果既没有委托回调application:didRegisterForRemoteNotificationsWithDeviceToken:也没有application:didFailToRegisterForRemoteNotificationsWithError:调用,则表示该连接尚未建立。

这不一定是错误情况。该系统可能根本没有互联网连接,因为它超出了任何手机信号塔或 Wi-Fi 接入点的范围,或者它可能处于飞行模式。您的应用程序不应将此视为错误,而应正常继续,仅禁用依赖于推送通知的功能。

请记住,网络可用性可能会经常变化。一旦与推送服务的持久连接成功,将调用前面提到的应用程序委托方法之一。

于 2012-06-03T21:07:12.107 回答
1
-(void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 

不是

-(void)application:(UIApplication *)app didRegisterForRemoteNotificationsWith:DeviceToken:(NSData *)deviceToken 

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

故事寓意:小心复制和粘贴:)

于 2012-06-08T09:29:05.353 回答