Siva Sankar Siva Sankar - 1 month ago 29
Objective-C Question

Push Notification Using Api

I am working on push notifications,i have an api for push notifications but i don't no how to implement the code.i am using the ios 10 version,please help me.

Answer

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];
    }