iOS8.1无法接收苹果推送

时间:2014-11-12 03:38:56

标签: ios ios8 apple-push-notifications push ios8.1

用户会在第一次使用我们的应用时收到要求他们接收苹果推送的提醒。设备的操作系统版本为ios 8.0或更高版本。用户允许请求。 ios8.0设备可以接收苹果推送,但ios 8.1不能。我使用这段代码:

UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
        [application registerForRemoteNotificationTypes:myTypes];
 not use:
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert) categories:nil];
        [application registerUserNotificationSettings:settings];

我不知道错误!有人可以帮助我。谢谢!

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,以下代码对我有帮助!在iOS 8中,注册远程通知的方式已经改变。

 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
        {
            [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings
                                                                                 settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge)
                                                                                 categories:nil]];


            [[UIApplication sharedApplication] registerForRemoteNotifications];
        }
        else
        {
                    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
             (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
        }

答案 1 :(得分:0)

尝试使用" show"而不是"推"因为后者已被弃用,并暗示将来不再使用它。

答案 2 :(得分:0)

你应该为ios7&添加此代码AppDelegate

中的appDidFinishLaunch中的ios 8
/*--- Setup Push Notification ---*/
//For iOS 8
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)] && [UIApplication instancesRespondToSelector:@selector(registerForRemoteNotifications)])
{
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
}
//For iOS 7 & less
else if ([UIApplication instancesRespondToSelector:@selector(registerForRemoteNotificationTypes:)])
{
    UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes];
}

也许你不需要这个但是如果你需要接收远程通知方法

#pragma mark - For Remote Notification
#ifdef __IPHONE_8_0
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
//register to receive notifications
[application registerForRemoteNotifications];
}

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler
{
//handle the actions
//    if ([identifier isEqualToString:@"declineAction"]){
//    }
//    else if ([identifier isEqualToString:@"answerAction"]){
//    }
}
#endif

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSString *device_Token = [[[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] stringByReplacingOccurrencesOfString:@" " withString:@""];
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {

 // show some alert or otherwise handle the failure to register.
 NSLog(@"error : %@",error.localizedDescription);
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    [self SetUpActionWhenPushNotiClicked:userInfo application:application PushPop:NO];
}
-(void)SetUpActionWhenPushNotiClicked:(NSDictionary*)userInfo application:(UIApplication *)application PushPop:(BOOL)pushpop
{
NSLog(@"UserInfo : %@",userInfo);
application.applicationIconBadgeNumber = 0;
if (userInfo)
{
    if (application.applicationState == UIApplicationStateActive )
    {
        //NSLog(@"app is already open");
    }
    else if (application.applicationState == UIApplicationStateBackground ||
             application.applicationState == UIApplicationStateInactive)
    {
        //NSLog(@"app is coming from bg");
    }
}

}

也许这会对你有帮助。