iOS 10的推送通知问题

+1 投票
最新提问 2月 27 分类:IOS | 用户: 花花 (390 分)
我开发了一个应用程序并已在苹果商店发布,并且实现了推送通知。在iOS 9中推送工作正常,但在iOS 10后,无法工作。问题可能的原因是什么?

1个回答

0 投票
最新回答 2月 27 用户: LX5818 (390 分)

首先,转到你的应用程序。选择功能并确保启用“推送通知”,并在“后台模式”下选择“远程通知”。

在这里输入图像描述

在这里输入图像描述

对于iOS 10,应使用xCode 8 GM。

我已经解决我的问题,使用xCode 8 GM for iOS 10,步骤如下:

1)在目标中,Capabilities允许推送通知添加推送通知授权。

2)在您的应用程序中实现UserNotifications.framework。在AppDelegate中导入UserNotifications.framework。

#import <UserNotifications/UserNotifications.h>
@interface AppDelegate : UIResponder   <UIApplicationDelegate,UNUserNotificationCenterDelegate>

@end

3)在didFinishLaunchingWithOptions方法中分配UIUserNotificationSettings和实现UNUserNotificationCenter委托。

#define SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

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

if(SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO(@"10.0")){
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate = self;
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
         if( !error ){
             [[UIApplication sharedApplication] registerForRemoteNotifications];
         }
     }];  
}

return YES;
}

4)现在最终实现这两个委托方法。

// ==================== for iOS 10 ====================

-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{

    //Called when a notification is delivered to a foreground app. 

    NSLog(@"Userinfo %@",notification.request.content.userInfo);

    completionHandler(UNNotificationPresentationOptionAlert);
}

-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{

   //Called to let your app know which action was selected by the user for a given notification.

   NSLog(@"Userinfo %@",response.notification.request.content.userInfo);

}

该代码在iOS 9的基础上进行了修改,以支持iOS 10的推送通知,使用UserNotifications.framework。

欢迎来到编程助手,编程方面有什么不懂的问题可以尽管在这里提问,你将会收到热心爱好者的回答。
...