title: Don't receive push notifications with GCM on iOS
body: <p>I followed this tutorial <a href="https://developers.google.com/cloud-messaging/ios/client" rel="nofollow">https://developers.google.com/cloud-messaging/ios/client</a> to implement Google Cloud Messaging on my iOS application. I use google app engine as server side and the java library for GCM to send messages and it works perfectly for my Android application. However my iOS application does not receive messages from it.</p>
  
  <p>I don't understand why because I do get the registration token and send it to my server side. I don't get any error log. Here is my AppDelegate.m code:</p>
  
  <pre><code>#import "AppDelegate.h"
  
  @interface AppDelegate ()
  
  @property (nonatomic, strong) NSDictionary *registrationOptions;
  @property (nonatomic, strong) GGLInstanceIDTokenHandler registrationHandler;
  
  @end
  
  @implementation AppDelegate
  
  
  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  //-- Start the GCMService
  [[GCMService sharedInstance] startWithConfig:[GCMConfig defaultConfig]];
  if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)])
  {
      // iOS 8 Notifications
      [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
  
      [application registerForRemoteNotifications];
  }
  else
  {
      // iOS &lt; 8 Notifications
      [application registerForRemoteNotificationTypes:
       (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];
  }
  self.registrationHandler = ^(NSString *registrationToken, NSError *error){
      if (registrationToken != nil) {
  //I do get the token, and I can store it
          NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
          [defaults setObject:registrationToken forKey:CLE_TOKENGCM];
          NSLog(@"Registration Token: %@", registrationToken);
      } else {
          NSLog(@"Registration to GCM failed with error: %@", error.localizedDescription);
      }
  };
  return YES;
  }
  
  
  - (void)application:(UIApplication *)application
  didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
  // Start the GGLInstanceID shared instance with the default config and request a registration
  // token to enable reception of notifications
  NSLog(@"didRegisterForRemoteNotificationsWithDeviceToken");
  [[GGLInstanceID sharedInstance] startWithConfig:[GGLInstanceIDConfig defaultConfig]];
  self.registrationOptions = @{kGGLInstanceIDRegisterAPNSOption:deviceToken,
                           kGGLInstanceIDAPNSServerTypeSandboxOption:@NO};//I tried both YES and NO value
  [[GGLInstanceID sharedInstance] tokenWithAuthorizedEntity:SENDER_ID
                                                      scope:kGGLInstanceIDScopeGCM
                                                    options:self.registrationOptions
                                                    handler:self.registrationHandler];
  }
  
  - (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
  NSLog(@"Error in registration. Error: %@", err);
  }
  
  - (void)onTokenRefresh {
  // A rotation of the registration tokens is happening, so the app needs to request a new token.
  NSLog(@"The GCM registration token needs to be changed.");
  [[GGLInstanceID sharedInstance] tokenWithAuthorizedEntity:SENDER_ID
                                                      scope:kGGLInstanceIDScopeGCM
                                                    options:self.registrationOptions
                                                    handler:self.registrationHandler];
  }
  
  
  - (void)application:(UIApplication *)application
  didReceiveRemoteNotification:(NSDictionary *)userInfo
  fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))handler {
  NSLog(@"Notification received: %@", userInfo);//This log never prints so the method is never called
  // This works only if the app started the GCM service
  [[GCMService sharedInstance] appDidReceiveMessage:userInfo];
  // Handle the received message
  // Invoke the completion handler passing the appropriate UIBackgroundFetchResult value
  // ...
  }
  
  - (void)application:(UIApplication *)application
  didReceiveRemoteNotification:(NSDictionary *)userInfo {
  NSLog(@"Notification received: %@", userInfo);//This log never prints so the method is never called
  // This works only if the app started the GCM service
  [[GCMService sharedInstance] appDidReceiveMessage:userInfo];
  // Handle the received message
  // Invoke the completion handler passing the appropriate UIBackgroundFetchResult value
  // ...
  }
  
  @end
  </code></pre>