2

我一直在尝试使用 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

4 回答 4

3

该应用程序应使用:

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

不是

- (void)applicationDidFinishLaunching:(UIApplication *)application
于 2009-10-05T15:31:51.187 回答
2

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

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

于 2010-12-21T16:33:20.297 回答
0

我也有同样的经历,而且确实花了几个小时试图弄清楚这一点。最终,我认为我的 iPod touch 根本无法连接到 Apple 以获取设备令牌,但这与任何防火墙无关。相反,问题似乎在于设置某种(TLS?)加密连接以及设备的时钟,该时钟已重置为 1970 某处

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

于 2011-09-12T15:46:32.830 回答
-1

回调似乎很好,正如您所说,您应该在进行注册调用后不久(从任何地方)收到回调。

这似乎是一个愚蠢的问题,但可以肯定的是 - 您的委托方法在应用程序委托类中?

如果是这样,我就是不明白为什么不调用您的方法。我在那里看到了 NSLog 语句,但是您是否尝试过在入口处实际设置断点?而且您是在设备上进行测试,而不是在模拟器上进行测试,对吗?

于 2009-10-06T05:35:27.000 回答