2016-09-27 97 views
1

我正在通过苹果推送通知在iOS推送通知功能上工作,现在我正在通知应用程序处于后台或前台,但我想处理远程通知当我的应用程序在后台时,基本上当我的应用程序在后台时,它只是显示来自有效内容的警报消息。实际上,我只是想自定义我的远程通知。如何在应用程序处于后台时处理iOS远程通知

代码:

- (BOOL)application:(UIApplication)application didFinishLaunchingWithOptions:(NSDictionary)launchOptions { 
// Override point for customization after application launch. 
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)]; 
} 
return YES; 
} 
- (void)application:(UIApplication *)application 
didFailToRegisterForRemoteNotificationsWithError:(NSError *)error 
{ 
NSLog(@"Did Register for Remote Notifications with Device Token (%@)", error); 
} 
- (void)application:(UIApplication)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData)deviceToken { 
NSLog(@"Did Register for Remote Notifications with Device Token (%@)", deviceToken); 
} 
-(void)application:(UIApplication)application didReceiveRemoteNotification:(NSDictionary)userInfo fetchCompletionHandler:(void (UIBackgroundFetchResult))completionHandler 
{ 
NSDictionary * aps=[userInfo valueForKey"aps"]; 
NSLog(@"did recevie %@",aps); 
NSLog(@"userinfo details %@",[aps valueForKey"alert"]); 
} 
+0

您正在测试设备中使用哪个版本的iOS? – Himanth

+0

对于iOS 10及以上版本,你必须做一些其他的东西 – Himanth

+0

它是在ios 10.0 –

回答

2

在iOS中10首先你要设置UNUserNotificationCenterDelegateAppDelegate.h文件

@interface AppDelegate : UIResponder <UIApplicationDelegate,CLLocationManagerDelegate,UNUserNotificationCenterDelegate> 

后,在AppDelegate.m这样写代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.1) { 
      // iOS 7.1 or earlier. Disable the deprecation warnings. 
      UIRemoteNotificationType allNotificationTypes = 
      (UIRemoteNotificationTypeSound | 
      UIRemoteNotificationTypeAlert | 
      UIRemoteNotificationTypeBadge); 
      [application registerForRemoteNotificationTypes:allNotificationTypes]; 
      [[UIApplication sharedApplication] registerForRemoteNotifications]; 
     } else { 
      // iOS 8 or later 
      // [START register_for_notifications] 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0) 
    { 
       UIUserNotificationType allNotificationTypes = 
       (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge); 
       UIUserNotificationSettings *settings = 
       [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil]; 
       [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; 
       [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; 
       [[UIApplication sharedApplication] registerForRemoteNotifications]; 
       [application registerForRemoteNotifications]; 
      } else { 
       // iOS 10 or later 
    #if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 
       UNAuthorizationOptions authOptions = 
       UNAuthorizationOptionAlert 
       | UNAuthorizationOptionSound 
       | UNAuthorizationOptionBadge; 
       [[UNUserNotificationCenter currentNotificationCenter] 
       requestAuthorizationWithOptions:authOptions 
       completionHandler:^(BOOL granted, NSError * _Nullable error) { 
       } 
       ]; 
       // For iOS 10 display notification (sent via APNS) 
       [[UNUserNotificationCenter currentNotificationCenter] setDelegate:self];    
    [[UIApplication sharedApplication] registerForRemoteNotifications]; 
     return YES; 
} 

现在实现这个方法适用于iOS10以下版本

- (void)application:(UIApplication *)application 
    didReceiveRemoteNotification:(NSDictionary *)userInfo 
    fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))handler { 
     NSLog(@"Notification received: %@", userInfo); 
     if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) 
     { 
      NSLog(@"iOS version >= 10. Let NotificationCenter handle this one."); 
      return; 
     } 
     NSLog(@"HANDLE PUSH, didReceiveRemoteNotification: %@", userInfo); 
      else{ 
      handler(UIBackgroundFetchResultNewData); 
} 

    } 

Apple在iOS10中引入了这两种方法来接收推送通知。

写这些方法也

// Receive displayed notifications for iOS 10 devices. 
    #if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 
    - (void)userNotificationCenter:(UNUserNotificationCenter *)center 
      willPresentNotification:(UNNotification *)notification 
      withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler { 

     NSDictionary *userInfo = notification.request.content.userInfo; 

     NSLog(@"%@", userInfo); 

      completionHandler(UNNotificationPresentationOptionAlert); 
    } 

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

    NSLog(@"Userinfo %@",response.notification.request.content.userInfo); 
// completionHandler(UNNotificationPresentationOptionAlert); 
     } 

就是这样。

试试这个

+1

没有这些方法是imho执行,而应用程序是背景 – luky

+0

耶没有这些方法调用 – kemdo

相关问题