【问题标题】:Apple Push Notifications: Not receiving device token?Apple 推送通知:未收到设备令牌?
【发布时间】:2015-02-28 00:22:46
【问题描述】:

在涉及推送通知的应用程序中,我可以正常接收设备令牌,但我客户的设备没有收到设备令牌(因此导致无法接收推送通知)。我正在使用 Parse 进行推送通知。这就是我的AppDelegate

-(void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)newDeviceToken {
    // Store the deviceToken in the current installation and save it to Parse.
    PFInstallation *currentInstallation = [PFInstallation currentInstallation];
    [currentInstallation setDeviceTokenFromData:newDeviceToken];
    PFACL *objectACL = [[PFACL alloc] init];
    [objectACL setPublicReadAccess:YES];
    [objectACL setPublicWriteAccess:YES];

    [currentInstallation saveInBackground];
}

-(void) application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{

    NSString *errorString = [NSString stringWithFormat:@"%@", error];
    UIAlertView *errorAlertView = [[UIAlertView alloc] initWithTitle:@"Error" message:errorString delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];

    [errorAlertView show];
}
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
    [application registerForRemoteNotifications];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [Parse setApplicationId:PARSE_APPLICATION_ID
                  clientKey:PARSE_CUSTOMER_KEY];
    [PFFacebookUtils initializeFacebook];

    [self.window makeKeyAndVisible];

    // create the Login controller instance:

    [application registerForRemoteNotificationTypes:
     UIRemoteNotificationTypeBadge |
     UIRemoteNotificationTypeAlert |
     UIRemoteNotificationTypeSound];
}

客户端没有收到任何表示向 APN 注册失败的 UIAlert,这意味着没有调用 didFailToRegisterForRemoteNotificationsWithError。我已尝试根据 Apple 技术说明 TN2265 的指南从我的解析服务器中删除所有安装,删除应用程序并重新安装。该应用程序不会在首次启动时提示客户端授权推送通知并且也不会出现在通知中心(这令人困惑,因为didRegisterUserNotificationSettings: 也在那里)。但这一切在我的 iPad、iPhone 5S、iPod 5、iPhone 4s 上运行良好。任何想法可能导致此设备在应用程序中设备变量行为?!这是 sc 客户端发送给我的。notificationCenterScreenShot

【问题讨论】:

  • 你能告诉我你是如何注册推送通知的吗?
  • 我也添加了 didFinish 方法

标签: ios iphone apple-push-notifications


【解决方案1】:

试试下面的代码

    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)])
    {
        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    }
    else
    {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
         (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
    }

在您的 AppDelegate 类中的 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法内

【讨论】:

  • 但这是为了 iOS 8 和我假设的向后兼容性?
  • @NSNoob 是的,但是从 iOS 8 你必须使用 registerUserNotificationSettings 方法来设置通知类型,然后你必须调用 registerForRemoteNotifications 方法来注册它。
  • 嗯,是的,他可能正在使用 iOS 8 的设备上测试该应用程序。我将不得不等待他的回复,如果这是解决方案,我会将其标记为正确答案,谢谢。
  • 这家伙还没放假,所以他没有回应。不要着急,我一得到消息,我会把它标记为答案。
  • 是的,那个人告诉我他使用的是 iOS 7,而事实上他使用的是导致所有问题的 iOS 8。谢谢
猜你喜欢
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多