Firebase Notifications don't trigger didReceiveRemoteNotification only triggers didReceiveMessage











up vote
0
down vote

favorite












When a notification is sent it only triggers the didReceiveMessage method, but never the didReceiveRemoteNotification. I followed the documentation and the quick start example, but it doesn't seem to work. Here is my code:



#import "AppDelegate.h"
#import "NavigationViewController.h"


@import Firebase;
@import FirebaseInstanceID;
@import UserNotifications;


@interface AppDelegate ()<UNUserNotificationCenterDelegate, FIRMessagingDelegate>
@property(nonatomic, strong) void (^registrationHandler)
(NSString *registrationToken, NSError *error);
@property(nonatomic, assign) BOOL connectedToGCM;
@property(nonatomic, strong) NSString* registrationToken;
@end


@implementation AppDelegate
NSString *const kGCMMessageIDKey = @"gcm.message_id";


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

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tokenRefreshNotification:)
name:kFIRInstanceIDTokenRefreshNotification object:nil];


[FIRApp configure];

[FIRMessaging messaging].delegate=self ;


if ([UNUserNotificationCenter class] != nil) {
// iOS 10 or later
// For iOS 10 display notification (sent via APNS)
[UNUserNotificationCenter currentNotificationCenter].delegate = self;
UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
[[UNUserNotificationCenter currentNotificationCenter]
requestAuthorizationWithOptions:authOptions
completionHandler:^(BOOL granted, NSError * _Nullable error) {
// ...
NSLog(@"notif request granted:%@",granted?@"YES":@"NO");
}];
} else {
// iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
UIUserNotificationType allNotificationTypes =
(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
UIUserNotificationSettings *settings =
[UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
[application registerUserNotificationSettings:settings];
}

[application registerForRemoteNotifications];

...
}


- (void)connectToFcm {
[[FIRMessaging messaging] connectWithCompletion:^(NSError * _Nullable error) {
if (error != nil) {
NSLog(@"Unable to connect to FCM. %@", error);
} else {
NSLog(@"Connected to FCM.");
}
}];
}
// [END connect_to_fcm]

- (void)applicationDidBecomeActive:(UIApplication *)application {
[self connectToFcm];
}

// [START disconnect_from_fcm]
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[FIRMessaging messaging] disconnect];
NSLog(@"Disconnected from FCM");
}
// [END disconnect_from_fcm]


// [START receive_message]
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

[[FIRMessaging messaging] appDidReceiveMessage:userInfo];

// Print message ID.
if (userInfo[kGCMMessageIDKey]) {
NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
}

NSLog(@"User info: %@", userInfo);
...
// Print full message.
NSLog(@"%@", userInfo);
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

// If you are receiving a notification message while your app is in the background,
// this callback will not be fired till the user taps on the notification launching the application.
// TODO: Handle data of notification

[[FIRMessaging messaging] appDidReceiveMessage:userInfo];

// Print message ID.
if (userInfo[kGCMMessageIDKey]) {
NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
}

NSLog(@"User info: %@", userInfo);
...
// Print full message.
NSLog(@"%@", userInfo);

completionHandler(UIBackgroundFetchResultNewData);
}
// [END receive_message]

// [START ios_10_message_handling]
// Receive displayed notifications for iOS 10 devices.
// Handle incoming notification messages while app is in the foreground.
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {

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


[[FIRMessaging messaging] appDidReceiveMessage:userInfo];

// Print message ID.
if (userInfo[kGCMMessageIDKey]) {
NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
}

NSLog(@"User info: %@", userInfo);
...

// Print full message.
NSLog(@"%@", userInfo);

// Change this to your preferred presentation option
completionHandler(UNNotificationPresentationOptionNone);
}

// Handle notification messages after display notification is tapped by the user.
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void(^)(void))completionHandler {
NSDictionary *userInfo = response.notification.request.content.userInfo;
if (userInfo[kGCMMessageIDKey]) {
NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
}

NSLog(@"User info: %@", userInfo);
NSDictionary *aps = [NSDictionary dictionaryWithDictionary:[userInfo objectForKey:@"aps"]];
NSString *clickAction = [aps objectForKey:@"category"];
if(clickAction!=nil){
NavigationViewController *myNavigationViewController = [[NavigationViewController alloc] initWithNibName:nil bundle:nil];
[myNavigationViewController notifLoadMenu:clickAction];
}
// Print full message.
NSLog(@"%@", userInfo);

completionHandler();
}

// [END ios_10_message_handling]

// [START refresh_token]
- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {
NSLog(@"FCM registration token: %@", fcmToken);
// Notify about received token.
...

NSLog(@"InstanceID token: %@", fcmToken);

// Note: This callback is fired at each app startup and whenever a new token is generated.
}
// [END refresh_token]

// [START ios_10_data_message]
// Receive data messages on iOS 10+ directly from FCM (bypassing APNs) when the app is in the foreground.
// To enable direct data messages, you can set [Messaging messaging].shouldEstablishDirectChannel to YES.
- (void)messaging:(FIRMessaging *)messaging didReceiveMessage:(FIRMessagingRemoteMessage *)remoteMessage {

NSLog(@"Received data message: %@", remoteMessage.appData);
}
// [END ios_10_data_message]

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"Unable to register for remote notifications: %@", error);
}



- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSLog(@"APNs device token retrieved: %@", deviceToken);

[FIRMessaging messaging].APNSToken = deviceToken;
}

- (void)applicationReceivedRemoteMessage:(FIRMessagingRemoteMessage *)remoteMessage{
NSLog(@"RECEIVED MESSAGE");
}



@end


Is there something im missing, or doing wrong?



This is the code im using to send the notification. (Which works just fine with my android app)



<?php

$notification = array('title' => 'Test' ,'body' => 'Test', 'sound' => 'default', "click_action" => "4");



$ids = array(The token);


sendPushNotification($notification, $ids);

function sendPushNotification($notification, $ids)
{

$apiKey = 'xxx';


$post = array(
'registration_ids' => $ids,
'data' => $notification,
'priority' => 'high',
'content_avalaible' => 'true',
);

$headers = array(
'Authorization: key=' . $apiKey,
'Content-Type: application/json'
);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send');

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post));

$result = curl_exec($ch);


if (curl_errno($ch))
{
echo 'FCM error: ' . curl_error($ch);
}

curl_close($ch);

echo $result;
}

?>


Thanks










share|improve this question




























    up vote
    0
    down vote

    favorite












    When a notification is sent it only triggers the didReceiveMessage method, but never the didReceiveRemoteNotification. I followed the documentation and the quick start example, but it doesn't seem to work. Here is my code:



    #import "AppDelegate.h"
    #import "NavigationViewController.h"


    @import Firebase;
    @import FirebaseInstanceID;
    @import UserNotifications;


    @interface AppDelegate ()<UNUserNotificationCenterDelegate, FIRMessagingDelegate>
    @property(nonatomic, strong) void (^registrationHandler)
    (NSString *registrationToken, NSError *error);
    @property(nonatomic, assign) BOOL connectedToGCM;
    @property(nonatomic, strong) NSString* registrationToken;
    @end


    @implementation AppDelegate
    NSString *const kGCMMessageIDKey = @"gcm.message_id";


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

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tokenRefreshNotification:)
    name:kFIRInstanceIDTokenRefreshNotification object:nil];


    [FIRApp configure];

    [FIRMessaging messaging].delegate=self ;


    if ([UNUserNotificationCenter class] != nil) {
    // iOS 10 or later
    // For iOS 10 display notification (sent via APNS)
    [UNUserNotificationCenter currentNotificationCenter].delegate = self;
    UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
    UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
    [[UNUserNotificationCenter currentNotificationCenter]
    requestAuthorizationWithOptions:authOptions
    completionHandler:^(BOOL granted, NSError * _Nullable error) {
    // ...
    NSLog(@"notif request granted:%@",granted?@"YES":@"NO");
    }];
    } else {
    // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
    UIUserNotificationType allNotificationTypes =
    (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
    UIUserNotificationSettings *settings =
    [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
    [application registerUserNotificationSettings:settings];
    }

    [application registerForRemoteNotifications];

    ...
    }


    - (void)connectToFcm {
    [[FIRMessaging messaging] connectWithCompletion:^(NSError * _Nullable error) {
    if (error != nil) {
    NSLog(@"Unable to connect to FCM. %@", error);
    } else {
    NSLog(@"Connected to FCM.");
    }
    }];
    }
    // [END connect_to_fcm]

    - (void)applicationDidBecomeActive:(UIApplication *)application {
    [self connectToFcm];
    }

    // [START disconnect_from_fcm]
    - (void)applicationDidEnterBackground:(UIApplication *)application {
    [[FIRMessaging messaging] disconnect];
    NSLog(@"Disconnected from FCM");
    }
    // [END disconnect_from_fcm]


    // [START receive_message]
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    [[FIRMessaging messaging] appDidReceiveMessage:userInfo];

    // Print message ID.
    if (userInfo[kGCMMessageIDKey]) {
    NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
    }

    NSLog(@"User info: %@", userInfo);
    ...
    // Print full message.
    NSLog(@"%@", userInfo);
    }

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

    // If you are receiving a notification message while your app is in the background,
    // this callback will not be fired till the user taps on the notification launching the application.
    // TODO: Handle data of notification

    [[FIRMessaging messaging] appDidReceiveMessage:userInfo];

    // Print message ID.
    if (userInfo[kGCMMessageIDKey]) {
    NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
    }

    NSLog(@"User info: %@", userInfo);
    ...
    // Print full message.
    NSLog(@"%@", userInfo);

    completionHandler(UIBackgroundFetchResultNewData);
    }
    // [END receive_message]

    // [START ios_10_message_handling]
    // Receive displayed notifications for iOS 10 devices.
    // Handle incoming notification messages while app is in the foreground.
    - (void)userNotificationCenter:(UNUserNotificationCenter *)center
    willPresentNotification:(UNNotification *)notification
    withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {

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


    [[FIRMessaging messaging] appDidReceiveMessage:userInfo];

    // Print message ID.
    if (userInfo[kGCMMessageIDKey]) {
    NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
    }

    NSLog(@"User info: %@", userInfo);
    ...

    // Print full message.
    NSLog(@"%@", userInfo);

    // Change this to your preferred presentation option
    completionHandler(UNNotificationPresentationOptionNone);
    }

    // Handle notification messages after display notification is tapped by the user.
    - (void)userNotificationCenter:(UNUserNotificationCenter *)center
    didReceiveNotificationResponse:(UNNotificationResponse *)response
    withCompletionHandler:(void(^)(void))completionHandler {
    NSDictionary *userInfo = response.notification.request.content.userInfo;
    if (userInfo[kGCMMessageIDKey]) {
    NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
    }

    NSLog(@"User info: %@", userInfo);
    NSDictionary *aps = [NSDictionary dictionaryWithDictionary:[userInfo objectForKey:@"aps"]];
    NSString *clickAction = [aps objectForKey:@"category"];
    if(clickAction!=nil){
    NavigationViewController *myNavigationViewController = [[NavigationViewController alloc] initWithNibName:nil bundle:nil];
    [myNavigationViewController notifLoadMenu:clickAction];
    }
    // Print full message.
    NSLog(@"%@", userInfo);

    completionHandler();
    }

    // [END ios_10_message_handling]

    // [START refresh_token]
    - (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {
    NSLog(@"FCM registration token: %@", fcmToken);
    // Notify about received token.
    ...

    NSLog(@"InstanceID token: %@", fcmToken);

    // Note: This callback is fired at each app startup and whenever a new token is generated.
    }
    // [END refresh_token]

    // [START ios_10_data_message]
    // Receive data messages on iOS 10+ directly from FCM (bypassing APNs) when the app is in the foreground.
    // To enable direct data messages, you can set [Messaging messaging].shouldEstablishDirectChannel to YES.
    - (void)messaging:(FIRMessaging *)messaging didReceiveMessage:(FIRMessagingRemoteMessage *)remoteMessage {

    NSLog(@"Received data message: %@", remoteMessage.appData);
    }
    // [END ios_10_data_message]

    - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"Unable to register for remote notifications: %@", error);
    }



    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSLog(@"APNs device token retrieved: %@", deviceToken);

    [FIRMessaging messaging].APNSToken = deviceToken;
    }

    - (void)applicationReceivedRemoteMessage:(FIRMessagingRemoteMessage *)remoteMessage{
    NSLog(@"RECEIVED MESSAGE");
    }



    @end


    Is there something im missing, or doing wrong?



    This is the code im using to send the notification. (Which works just fine with my android app)



    <?php

    $notification = array('title' => 'Test' ,'body' => 'Test', 'sound' => 'default', "click_action" => "4");



    $ids = array(The token);


    sendPushNotification($notification, $ids);

    function sendPushNotification($notification, $ids)
    {

    $apiKey = 'xxx';


    $post = array(
    'registration_ids' => $ids,
    'data' => $notification,
    'priority' => 'high',
    'content_avalaible' => 'true',
    );

    $headers = array(
    'Authorization: key=' . $apiKey,
    'Content-Type: application/json'
    );

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send');

    curl_setopt($ch, CURLOPT_POST, true);

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post));

    $result = curl_exec($ch);


    if (curl_errno($ch))
    {
    echo 'FCM error: ' . curl_error($ch);
    }

    curl_close($ch);

    echo $result;
    }

    ?>


    Thanks










    share|improve this question


























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      When a notification is sent it only triggers the didReceiveMessage method, but never the didReceiveRemoteNotification. I followed the documentation and the quick start example, but it doesn't seem to work. Here is my code:



      #import "AppDelegate.h"
      #import "NavigationViewController.h"


      @import Firebase;
      @import FirebaseInstanceID;
      @import UserNotifications;


      @interface AppDelegate ()<UNUserNotificationCenterDelegate, FIRMessagingDelegate>
      @property(nonatomic, strong) void (^registrationHandler)
      (NSString *registrationToken, NSError *error);
      @property(nonatomic, assign) BOOL connectedToGCM;
      @property(nonatomic, strong) NSString* registrationToken;
      @end


      @implementation AppDelegate
      NSString *const kGCMMessageIDKey = @"gcm.message_id";


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

      [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tokenRefreshNotification:)
      name:kFIRInstanceIDTokenRefreshNotification object:nil];


      [FIRApp configure];

      [FIRMessaging messaging].delegate=self ;


      if ([UNUserNotificationCenter class] != nil) {
      // iOS 10 or later
      // For iOS 10 display notification (sent via APNS)
      [UNUserNotificationCenter currentNotificationCenter].delegate = self;
      UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
      UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
      [[UNUserNotificationCenter currentNotificationCenter]
      requestAuthorizationWithOptions:authOptions
      completionHandler:^(BOOL granted, NSError * _Nullable error) {
      // ...
      NSLog(@"notif request granted:%@",granted?@"YES":@"NO");
      }];
      } else {
      // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
      UIUserNotificationType allNotificationTypes =
      (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
      UIUserNotificationSettings *settings =
      [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
      [application registerUserNotificationSettings:settings];
      }

      [application registerForRemoteNotifications];

      ...
      }


      - (void)connectToFcm {
      [[FIRMessaging messaging] connectWithCompletion:^(NSError * _Nullable error) {
      if (error != nil) {
      NSLog(@"Unable to connect to FCM. %@", error);
      } else {
      NSLog(@"Connected to FCM.");
      }
      }];
      }
      // [END connect_to_fcm]

      - (void)applicationDidBecomeActive:(UIApplication *)application {
      [self connectToFcm];
      }

      // [START disconnect_from_fcm]
      - (void)applicationDidEnterBackground:(UIApplication *)application {
      [[FIRMessaging messaging] disconnect];
      NSLog(@"Disconnected from FCM");
      }
      // [END disconnect_from_fcm]


      // [START receive_message]
      - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

      [[FIRMessaging messaging] appDidReceiveMessage:userInfo];

      // Print message ID.
      if (userInfo[kGCMMessageIDKey]) {
      NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
      }

      NSLog(@"User info: %@", userInfo);
      ...
      // Print full message.
      NSLog(@"%@", userInfo);
      }

      - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
      fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

      // If you are receiving a notification message while your app is in the background,
      // this callback will not be fired till the user taps on the notification launching the application.
      // TODO: Handle data of notification

      [[FIRMessaging messaging] appDidReceiveMessage:userInfo];

      // Print message ID.
      if (userInfo[kGCMMessageIDKey]) {
      NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
      }

      NSLog(@"User info: %@", userInfo);
      ...
      // Print full message.
      NSLog(@"%@", userInfo);

      completionHandler(UIBackgroundFetchResultNewData);
      }
      // [END receive_message]

      // [START ios_10_message_handling]
      // Receive displayed notifications for iOS 10 devices.
      // Handle incoming notification messages while app is in the foreground.
      - (void)userNotificationCenter:(UNUserNotificationCenter *)center
      willPresentNotification:(UNNotification *)notification
      withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {

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


      [[FIRMessaging messaging] appDidReceiveMessage:userInfo];

      // Print message ID.
      if (userInfo[kGCMMessageIDKey]) {
      NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
      }

      NSLog(@"User info: %@", userInfo);
      ...

      // Print full message.
      NSLog(@"%@", userInfo);

      // Change this to your preferred presentation option
      completionHandler(UNNotificationPresentationOptionNone);
      }

      // Handle notification messages after display notification is tapped by the user.
      - (void)userNotificationCenter:(UNUserNotificationCenter *)center
      didReceiveNotificationResponse:(UNNotificationResponse *)response
      withCompletionHandler:(void(^)(void))completionHandler {
      NSDictionary *userInfo = response.notification.request.content.userInfo;
      if (userInfo[kGCMMessageIDKey]) {
      NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
      }

      NSLog(@"User info: %@", userInfo);
      NSDictionary *aps = [NSDictionary dictionaryWithDictionary:[userInfo objectForKey:@"aps"]];
      NSString *clickAction = [aps objectForKey:@"category"];
      if(clickAction!=nil){
      NavigationViewController *myNavigationViewController = [[NavigationViewController alloc] initWithNibName:nil bundle:nil];
      [myNavigationViewController notifLoadMenu:clickAction];
      }
      // Print full message.
      NSLog(@"%@", userInfo);

      completionHandler();
      }

      // [END ios_10_message_handling]

      // [START refresh_token]
      - (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {
      NSLog(@"FCM registration token: %@", fcmToken);
      // Notify about received token.
      ...

      NSLog(@"InstanceID token: %@", fcmToken);

      // Note: This callback is fired at each app startup and whenever a new token is generated.
      }
      // [END refresh_token]

      // [START ios_10_data_message]
      // Receive data messages on iOS 10+ directly from FCM (bypassing APNs) when the app is in the foreground.
      // To enable direct data messages, you can set [Messaging messaging].shouldEstablishDirectChannel to YES.
      - (void)messaging:(FIRMessaging *)messaging didReceiveMessage:(FIRMessagingRemoteMessage *)remoteMessage {

      NSLog(@"Received data message: %@", remoteMessage.appData);
      }
      // [END ios_10_data_message]

      - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
      NSLog(@"Unable to register for remote notifications: %@", error);
      }



      - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
      NSLog(@"APNs device token retrieved: %@", deviceToken);

      [FIRMessaging messaging].APNSToken = deviceToken;
      }

      - (void)applicationReceivedRemoteMessage:(FIRMessagingRemoteMessage *)remoteMessage{
      NSLog(@"RECEIVED MESSAGE");
      }



      @end


      Is there something im missing, or doing wrong?



      This is the code im using to send the notification. (Which works just fine with my android app)



      <?php

      $notification = array('title' => 'Test' ,'body' => 'Test', 'sound' => 'default', "click_action" => "4");



      $ids = array(The token);


      sendPushNotification($notification, $ids);

      function sendPushNotification($notification, $ids)
      {

      $apiKey = 'xxx';


      $post = array(
      'registration_ids' => $ids,
      'data' => $notification,
      'priority' => 'high',
      'content_avalaible' => 'true',
      );

      $headers = array(
      'Authorization: key=' . $apiKey,
      'Content-Type: application/json'
      );

      $ch = curl_init();

      curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send');

      curl_setopt($ch, CURLOPT_POST, true);

      curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post));

      $result = curl_exec($ch);


      if (curl_errno($ch))
      {
      echo 'FCM error: ' . curl_error($ch);
      }

      curl_close($ch);

      echo $result;
      }

      ?>


      Thanks










      share|improve this question















      When a notification is sent it only triggers the didReceiveMessage method, but never the didReceiveRemoteNotification. I followed the documentation and the quick start example, but it doesn't seem to work. Here is my code:



      #import "AppDelegate.h"
      #import "NavigationViewController.h"


      @import Firebase;
      @import FirebaseInstanceID;
      @import UserNotifications;


      @interface AppDelegate ()<UNUserNotificationCenterDelegate, FIRMessagingDelegate>
      @property(nonatomic, strong) void (^registrationHandler)
      (NSString *registrationToken, NSError *error);
      @property(nonatomic, assign) BOOL connectedToGCM;
      @property(nonatomic, strong) NSString* registrationToken;
      @end


      @implementation AppDelegate
      NSString *const kGCMMessageIDKey = @"gcm.message_id";


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

      [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tokenRefreshNotification:)
      name:kFIRInstanceIDTokenRefreshNotification object:nil];


      [FIRApp configure];

      [FIRMessaging messaging].delegate=self ;


      if ([UNUserNotificationCenter class] != nil) {
      // iOS 10 or later
      // For iOS 10 display notification (sent via APNS)
      [UNUserNotificationCenter currentNotificationCenter].delegate = self;
      UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
      UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
      [[UNUserNotificationCenter currentNotificationCenter]
      requestAuthorizationWithOptions:authOptions
      completionHandler:^(BOOL granted, NSError * _Nullable error) {
      // ...
      NSLog(@"notif request granted:%@",granted?@"YES":@"NO");
      }];
      } else {
      // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
      UIUserNotificationType allNotificationTypes =
      (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
      UIUserNotificationSettings *settings =
      [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
      [application registerUserNotificationSettings:settings];
      }

      [application registerForRemoteNotifications];

      ...
      }


      - (void)connectToFcm {
      [[FIRMessaging messaging] connectWithCompletion:^(NSError * _Nullable error) {
      if (error != nil) {
      NSLog(@"Unable to connect to FCM. %@", error);
      } else {
      NSLog(@"Connected to FCM.");
      }
      }];
      }
      // [END connect_to_fcm]

      - (void)applicationDidBecomeActive:(UIApplication *)application {
      [self connectToFcm];
      }

      // [START disconnect_from_fcm]
      - (void)applicationDidEnterBackground:(UIApplication *)application {
      [[FIRMessaging messaging] disconnect];
      NSLog(@"Disconnected from FCM");
      }
      // [END disconnect_from_fcm]


      // [START receive_message]
      - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

      [[FIRMessaging messaging] appDidReceiveMessage:userInfo];

      // Print message ID.
      if (userInfo[kGCMMessageIDKey]) {
      NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
      }

      NSLog(@"User info: %@", userInfo);
      ...
      // Print full message.
      NSLog(@"%@", userInfo);
      }

      - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
      fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

      // If you are receiving a notification message while your app is in the background,
      // this callback will not be fired till the user taps on the notification launching the application.
      // TODO: Handle data of notification

      [[FIRMessaging messaging] appDidReceiveMessage:userInfo];

      // Print message ID.
      if (userInfo[kGCMMessageIDKey]) {
      NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
      }

      NSLog(@"User info: %@", userInfo);
      ...
      // Print full message.
      NSLog(@"%@", userInfo);

      completionHandler(UIBackgroundFetchResultNewData);
      }
      // [END receive_message]

      // [START ios_10_message_handling]
      // Receive displayed notifications for iOS 10 devices.
      // Handle incoming notification messages while app is in the foreground.
      - (void)userNotificationCenter:(UNUserNotificationCenter *)center
      willPresentNotification:(UNNotification *)notification
      withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {

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


      [[FIRMessaging messaging] appDidReceiveMessage:userInfo];

      // Print message ID.
      if (userInfo[kGCMMessageIDKey]) {
      NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
      }

      NSLog(@"User info: %@", userInfo);
      ...

      // Print full message.
      NSLog(@"%@", userInfo);

      // Change this to your preferred presentation option
      completionHandler(UNNotificationPresentationOptionNone);
      }

      // Handle notification messages after display notification is tapped by the user.
      - (void)userNotificationCenter:(UNUserNotificationCenter *)center
      didReceiveNotificationResponse:(UNNotificationResponse *)response
      withCompletionHandler:(void(^)(void))completionHandler {
      NSDictionary *userInfo = response.notification.request.content.userInfo;
      if (userInfo[kGCMMessageIDKey]) {
      NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
      }

      NSLog(@"User info: %@", userInfo);
      NSDictionary *aps = [NSDictionary dictionaryWithDictionary:[userInfo objectForKey:@"aps"]];
      NSString *clickAction = [aps objectForKey:@"category"];
      if(clickAction!=nil){
      NavigationViewController *myNavigationViewController = [[NavigationViewController alloc] initWithNibName:nil bundle:nil];
      [myNavigationViewController notifLoadMenu:clickAction];
      }
      // Print full message.
      NSLog(@"%@", userInfo);

      completionHandler();
      }

      // [END ios_10_message_handling]

      // [START refresh_token]
      - (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {
      NSLog(@"FCM registration token: %@", fcmToken);
      // Notify about received token.
      ...

      NSLog(@"InstanceID token: %@", fcmToken);

      // Note: This callback is fired at each app startup and whenever a new token is generated.
      }
      // [END refresh_token]

      // [START ios_10_data_message]
      // Receive data messages on iOS 10+ directly from FCM (bypassing APNs) when the app is in the foreground.
      // To enable direct data messages, you can set [Messaging messaging].shouldEstablishDirectChannel to YES.
      - (void)messaging:(FIRMessaging *)messaging didReceiveMessage:(FIRMessagingRemoteMessage *)remoteMessage {

      NSLog(@"Received data message: %@", remoteMessage.appData);
      }
      // [END ios_10_data_message]

      - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
      NSLog(@"Unable to register for remote notifications: %@", error);
      }



      - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
      NSLog(@"APNs device token retrieved: %@", deviceToken);

      [FIRMessaging messaging].APNSToken = deviceToken;
      }

      - (void)applicationReceivedRemoteMessage:(FIRMessagingRemoteMessage *)remoteMessage{
      NSLog(@"RECEIVED MESSAGE");
      }



      @end


      Is there something im missing, or doing wrong?



      This is the code im using to send the notification. (Which works just fine with my android app)



      <?php

      $notification = array('title' => 'Test' ,'body' => 'Test', 'sound' => 'default', "click_action" => "4");



      $ids = array(The token);


      sendPushNotification($notification, $ids);

      function sendPushNotification($notification, $ids)
      {

      $apiKey = 'xxx';


      $post = array(
      'registration_ids' => $ids,
      'data' => $notification,
      'priority' => 'high',
      'content_avalaible' => 'true',
      );

      $headers = array(
      'Authorization: key=' . $apiKey,
      'Content-Type: application/json'
      );

      $ch = curl_init();

      curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send');

      curl_setopt($ch, CURLOPT_POST, true);

      curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post));

      $result = curl_exec($ch);


      if (curl_errno($ch))
      {
      echo 'FCM error: ' . curl_error($ch);
      }

      curl_close($ch);

      echo $result;
      }

      ?>


      Thanks







      php ios objective-c firebase firebase-notifications






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 13 at 15:54

























      asked Nov 8 at 16:58









      andres25

      349




      349





























          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














           

          draft saved


          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53212616%2ffirebase-notifications-dont-trigger-didreceiveremotenotification-only-triggers%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown






























          active

          oldest

          votes













          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















           

          draft saved


          draft discarded



















































           


          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53212616%2ffirebase-notifications-dont-trigger-didreceiveremotenotification-only-triggers%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Schultheiß

          Verwaltungsgliederung Dänemarks

          Liste der Kulturdenkmale in Wilsdruff