简体   繁体   中英

Push Notification Using Api

我正在处理推送通知,我有一个用于推送通知的api,但我没有如何实现code.i正在使用ios 10版本,请帮助我。

You can get full idea about implementating Push notification in iOS 10 from below link. Here you will also find steps to implement the same in XCode 8. Please refer below link: Push notification issue with iOS 10

If we use IOS 10 we need to add new frame work and some code

STEP : 1

From iOS 10, we must add UserNotifications framework and delegat.First add this.

STEP : 2

Add the delegate UNUserNotificationCenterDelegate

Now appDelegate.h

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

appDelegate.m

STEP : 3

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
   application.applicationIconBadgeNumber = 0;
   if( SYSTEM_VERSION_LESS_THAN( @"10.0" ) )  
   {  
     [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound |    UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];  
    [[UIApplication sharedApplication] registerForRemoteNotifications];  
    }  
   else  
   {  
     UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];  
     center.delegate = self;  
     [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error)  
     {  
      if( !error )  
      {  
        [[UIApplication sharedApplication] registerForRemoteNotifications];  // required to get the app to do anything at all about push notifications  
        NSLog( @"Push registration success." );  
      }  
      else  
      {  
        NSLog( @"Push registration FAILED" );  
        NSLog( @"ERROR: %@ - %@", error.localizedFailureReason, error.localizedDescription );  
        NSLog( @"SUGGESTIONS: %@ - %@", error.localizedRecoveryOptions, error.localizedRecoverySuggestion );  
      }  
    }];  
   } 

  return YES;
 }

STEP : 4

  - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken  
  {  
      //  custom stuff we do to register the device with our AWS middleman  
       NSString *strToken = [[deviceToken description] stringByTrimmingCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"<>"]];
      strToken = [strToken stringByReplacingOccurrencesOfString:@" " withString:@""];
      NSLog(@"content---%@", strToken);

      NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",@"your url here"]]];


      [request setHTTPMethod:@"POST"];

      //Pass The String to server
      NSString *userUpdate =[NSString stringWithFormat:@"device_token=%@",strToken,nil];

      //Check The Value what we passed
      NSLog(@"the data Details is =%@", userUpdate);

      //Convert the String to Data
      NSData *data1 = [userUpdate dataUsingEncoding:NSUTF8StringEncoding];

      //Apply the data to the body
      [request setHTTPBody:data1];

      //Create the response and Error
      NSURLSession *session = [NSURLSession sharedSession];
      NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
      NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
      if(httpResponse.statusCode == 200)
      {
         if(httpResponse.statusCode == 200)
         {
            NSError *parseError = nil;
            NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];
            NSLog(@"The response is - %@",responseDictionary);
         }
         else
         {
            NSLog(@"Error");
         }
       }
       else
       {
          NSLog(@"faield to connect");
       }
        }];
      [dataTask resume];       

 }

STEP : 5

 -(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void  
 (^)(UIBackgroundFetchResult))completionHandler  
 {  
   // iOS 10 will handle notifications through other methods  

   if( SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO( @"10.0" ) )  
   {  
      NSLog( @"iOS version >= 10. Let NotificationCenter handle this one." );  
      // set a member variable to tell the new delegate that this is background  
        return;  
    }  
    NSLog( @"HANDLE PUSH, didReceiveRemoteNotification: %@", userInfo );  

    // custom code to handle notification content  

    if( [UIApplication sharedApplication].applicationState == UIApplicationStateInactive )  
    {  
       NSLog( @"INACTIVE" );  
       completionHandler( UIBackgroundFetchResultNewData );  
    }  
    else if( [UIApplication sharedApplication].applicationState == UIApplicationStateBackground )  
    {  
      NSLog( @"BACKGROUND" );  
      completionHandler( UIBackgroundFetchResultNewData );  
    }  
    else  
    {  
      NSLog( @"FOREGROUND" );  
      completionHandler( UIBackgroundFetchResultNewData );  
    }  
  }  

 //OR

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo  
 {  
    [self application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:^(UIBackgroundFetchResult result) {  
      }];  
      NSLog(@"Received notification: %@", userInfo);
      if ([userInfo count]!=0)
      {
        NSMutableArray *notify=[[NSMutableArray alloc]init];
        NSMutableArray *mutableRetrievedDictionary;
    mutableRetrievedDictionary = [[NSUserDefaults standardUserDefaults] objectForKey:@"noyificationcount"] ;
        NSMutableArray *deviealert = [[NSUserDefaults standardUserDefaults] objectForKey:@"noyificationcount"] ;
        deviealert=[[NSMutableArray alloc]init];
        [notify addObject: [[userInfo valueForKey:@"aps"] valueForKey:@"alert"]];
        NSLog(@"notification is - %@", notify);
        NSString *strAlertValue = [[userInfo valueForKey:@"aps"] valueForKey:@"badge"];
        NSLog(@"my message-- %@",strAlertValue);
        deviealert=[notify mutableCopy];
        NSLog(@"new...%@",deviealert);
        [[ NSUserDefaults standardUserDefaults]setObject:deviealert forKey:@"noyificationcount" ];
        [[NSUserDefaults standardUserDefaults]synchronize];
        NSLog(@"dev.....%@",deviealert);
        [UIApplication sharedApplication].applicationIconBadgeNumber+=1;
       }


  } 

STEP : 6

For Foreground State

 - (void)userNotificationCenter:(UNUserNotificationCenter *)center  
    willPresentNotification:(UNNotification *)notification  
    withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler  
  {  
     NSLog( @"Handle push from foreground" );  
     // custom code to handle push while app is in the foreground  
     NSLog(@"%@", notification.request.content.userInfo);
  }   

STEP : 7

For Background State

    - (void)userNotificationCenter:(UNUserNotificationCenter *)center  
    didReceiveNotificationResponse:(UNNotificationResponse *)response  
    withCompletionHandler:(void (^)())completionHandler 
    {  
      NSLog( @"Handle push from background or closed" );  
      // if you set a member variable in didReceiveRemoteNotification, you  will know if this is from closed or background  
      NSLog(@"%@", response.notification.request.content.userInfo);

      //Adding notification here
      [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadTheTable" object:nil];
    }  

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM