有时会收到空设备令牌

时间:2016-01-27 14:19:59

标签: ios objective-c push-notification apple-push-notifications devicetoken

我目前正在开发一个项目,允许用户在用户帐户有新内容时接收推送通知。我正在使用Parse作为我的推送通知服务。直到最近我们的服务器在每次推送通知注册时才开始接收空令牌设备,我没有问题,这个问题并不总是发生。因此,当我在我的设备上尝试应用程序时,它只是应该运行,但是当我的应用程序在我们的客户端设备上进行测试时,我们的服务器会收到该客户端用户的空令牌设备。怎么会发生这种情况?我怎样才能解决这个问题?获取和设置设备令牌的最佳做法是什么?

这是appdelegate中的代码:

- (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
const unsigned *tokenBytes = [deviceToken bytes];
NSString *token = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
                            ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
                            ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
                            ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];

//function for saving device token to server
[[ASEngine defaultEngine] setCurrentDeviceToken:token];
if([[ASEngine defaultEngine] currentCredential] != nil) {
    [[ASEngine defaultEngine] webStoreDeviceToken:token];

}

//save current instalation to parse
PFInstallation *currentInstallation = [PFInstallation currentInstallation];
[currentInstallation setDeviceTokenFromData:deviceToken];
[currentInstallation saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    NSLog(@"Error e current installation: %@", error);
}];

//save device token locally
[[NSUserDefaults standardUserDefaults] setObject:deviceToken forKey:@"deviceToken"];
}

2 个答案:

答案 0 :(得分:3)

永远不会生成空标记, iOS提供了didFailToRegisterForRemoteNotificationsWithError方法,可能在您的情况下调用,请确保检查令牌创建中的任何错误。

答案 1 :(得分:0)

有时,当您的设备未连接到互联网时会发生这种情况。 确保您的设备已连接到互联网。