Apple推送通知 - 无法回调didRegisterForRemoteNotificationsWithDeviceToken

时间:2009-10-05 11:00:54

标签: iphone apple-push-notifications

我一直在尝试使用Apple推送通知服务从我的iPhone应用程序中获取deviceToken。 我暂时没有在服务器端实现任何实现。 我创建了APP Id,获得了SSL证书,使用APN配置配置文件并调用

- (void)applicationDidFinishLaunching:(UIApplication *)application {
//view init and add sub view to window
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
}

方法。 当我执行应用程序时,它弹出操作框以允许推送通知(意味着我的APN注册请求正在工作),但我的回调未执行。调用 didRegisterForRemoteNotificationsWithDeviceToken 还是 didFailToRegisterForRemoteNotificationsWithError ?任何人都可以帮我解决这个问题吗?以下是我的callbacs供参考。

    - (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {

            UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"APNClient" message:@"Entered into Error Method" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [myAlert show];
            [myAlert release];
            NSLog(@"Error in registration. Error: %@", err);

        }
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {
    UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"APNClient" message:@"Got the deviceToken..!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [myAlert show];
    [myAlert release];        
}

4 个答案:

答案 0 :(得分:3)

该应用应该使用:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

- (void)applicationDidFinishLaunching:(UIApplication *)application

答案 1 :(得分:2)

我发现PUSH通知要求在您的网络中打开端口5223(如果您使用的是WIFI),或者是其他蜂窝数据连接。

我在家庭网络中遇到了同样的问题,不得不在无线路由器中手动打开端口。

答案 2 :(得分:0)

我已经有了同样的事情,并花了几个小时试图找到底线。最终,我认为我的iPod touch无法连接到Apple以获取设备令牌,但它与任何防火墙无关。相反,问题似乎是设置某种(TLS?)加密连接与设备的时钟重置到某处1970

更新时间修复了一切。希望这可以帮助那些人:)。

答案 3 :(得分:-1)

回调看起来很好,正如你所说的那样,你应该在注册电话后不久(从任何地方)收到回电。

这似乎是一个愚蠢的问题,但只是为了确定 - 您委托的方法是在应用程序委托类中吗?

如果是这样,我就看不出为什么你的方法不会被调用。我在那里看到了NSLog语句,但你是否尝试过在入口处设置断点?你正在测试设备,而不是模拟器,对吗?