为什么我在控制台ios10.2上接收消息时没有收到横幅和后台模式推送通知

为什么我在控制台ios10.2上接收消息时没有收到横幅和后台模式推送通知,ios,firebase,push-notification,firebase-cloud-messaging,Ios,Firebase,Push Notification,Firebase Cloud Messaging,以下是我的设置: 及 这是我的代理 #if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 #endif //#import "FIRMessaging.h" //#define SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO(v) ([[[UIDevice currentDevice] systemVersion] compare:

以下是我的设置:

这是我的代理

#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
#endif
//#import "FIRMessaging.h"
//#define SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO(v)  ([[[UIDevice       currentDevice] systemVersion] compare:v options:NSNumericSearch] !=   NSOrderedAscending)
@import UIKit;
@import Firebase;
@import FirebaseMessaging;
#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >=   __IPHONE_10_0
#endif
@interface AppDelegate ()
{
NSTimer *timer1;
}
@end
// Copied from Apple's header in case it is missing in some cases (e.g.     pre-Xcode 8 builds).
#ifndef NSFoundationVersionNumber_iOS_9_x_Max
#define NSFoundationVersionNumber_iOS_9_x_Max 1299 
#endif

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

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

if (floor(NSFoundationVersionNumber) <=   NSFoundationVersionNumber_iOS_7_1) {
      // iOS 7.1 or earlier. Disable the deprecation warnings.
 #pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
    UIRemoteNotificationType allNotificationTypes =
    (UIRemoteNotificationTypeSound |
     UIRemoteNotificationTypeAlert |
     UIRemoteNotificationTypeBadge);
    [application  registerForRemoteNotificationTypes:allNotificationTypes];
#pragma clang diagnostic pop
   } else {
     // iOS 8 or later
     // [START register_for_notifications]
    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_9_x_Max) {
        UIUserNotificationType allNotificationTypes =
        (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
        UIUserNotificationSettings *settings =
        [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    } 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].delegate = self;
        // For iOS 10 data message (sent via FCM)
        [FIRMessaging messaging].remoteMessageDelegate = self;
 #endif
    }

    [[UIApplication sharedApplication] registerForRemoteNotifications];
    // [END register_for_notifications]
}

  [FIRApp configure];
 ..../
我无法在后台获取横幅和通知,尽管我在控制台中获取消息,例如-voidapplicationReceivedRemoteMessage:firmMessageingRemoteMessage*remoteMessage已触发


也没有声音,所有配置文件都已完成,以防万一。

您需要在if语句之前调用[FIRApp configure]

好的,解决了。您需要在apple developer站点中设置应用程序ID,并在开发和分发时启用推送通知。捆绑包id必须与Xcode上的捆绑包id匹配。之后,您需要为该应用程序id创建一个配置文件,并将其安装到mac中。最后但并非最不重要的一点是,您需要将密钥链访问生成的p12文件放入Firebase控制台。在firebase控制台中,概览旁边有一个灰色齿轮按钮。您选择该选项,然后单击云消息选项卡,然后在扩展推送通知证书并导出p12文件时上载在keychain access中生成的p12证书文件。您需要输入密码并将其上载到firebase。

没有人对此有答案……我的死胡同丢失了,我已经搜索了所有相关主题,在ios10.2中,我没有收到应用程序在后台或关闭时的通知,也没有收到应用程序在前台时的横幅…我所能做的就是在控制台中显示消息时显示一个警报框…有人对此有任何想法…请帮助您检查了吗,来自ApplicationIDBecomeActive connectToFcm的成功响应?是的用户3585096,我正在连接到FCM,我得到了一个令牌…似乎内部通知机制根本不起作用…我现在也有同样的问题,如果我发现了,我会让你知道,visa也会告诉你,谢谢你。我以为它根本不起作用,但后来注意到控制台正在打印它:恐怕不是因为我在didFinishLaunchingWithOptions开始时移动了[FIRApp configure],但仍然是一样的…实际上只是在我的iPhone 5,2上测试了firebase消息示例,它在那里也做了同样的事情…在控制台上没有收到横幅,没有背景通知。搞笑的是,在解决问题后,在开发模式下,当我发布应用程序的更新时,通知停止在那里工作……另一个噩梦开始了!三周前发布了一个后续问题,因为推送通知现在只能在开发模式下工作,而不能在生产模式下工作。。。。。
     - (void)application:(UIApplication *)application      didReceiveRemoteNotification:(NSDictionary *)userInfo {
// 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

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

 // 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

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

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

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

// [START ios_10_message_handling]
// Receive displayed notifications for iOS 10 devices.
#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >=  __IPHONE_10_0
// Handle incoming notification messages while app is in the  foreground.
 - (void)userNotificationCenter:(UNUserNotificationCenter *)center
   willPresentNotification:(UNNotification *)notification
     withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
// Print message ID.
NSDictionary *userInfo = notification.request.content.userInfo;
if (userInfo[kGCMMessageIDKey]) {
    NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
}

// 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 (^)())completionHandler {
 NSDictionary *userInfo =    response.notification.request.content.userInfo;
  if (userInfo[kGCMMessageIDKey]) {
    NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
  }

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

  completionHandler();
  }
  #endif
  // [END ios_10_message_handling]

  // [START ios_10_data_message_handling]
  #if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >=   __IPHONE_10_0
  // Receive data message on iOS 10 devices while app is in the foreground.
   - (void)applicationReceivedRemoteMessage:(FIRMessagingRemoteMessage   *)remoteMessage {
  // Print full message
  NSLog(@"%@", remoteMessage.appData);
  }
  #endif
// [END ios_10_data_message_handling]

 // [START refresh_token]
 - (void)tokenRefreshNotification:(NSNotification *)notification {
// Note that this callback will be fired everytime a new token is   generated, including the first
// time. So if you need to retrieve the token as soon as it is available this is where that
// should be done.
NSString *refreshedToken = [[FIRInstanceID instanceID] token];
NSLog(@"InstanceID token: %@", refreshedToken);

// Connect to FCM since connection may have failed when attempted  before having a token.
[self connectToFcm];

// TODO: If necessary send token to application server.
}
// [END refresh_token]

// [START connect_to_fcm]
- (void)connectToFcm {
// Won't connect since there is no token
if (![[FIRInstanceID instanceID] token]) {
    return;
}

// Disconnect previous FCM connection if it exists.
[[FIRMessaging messaging] disconnect];

[[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)application:(UIApplication *)application  didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"Unable to register for remote notifications: %@", error);
}

  // This function is added here only for debugging purposes, and can be removed if swizzling is enabled.
  // If swizzling is disabled then this function must be implemented so that the APNs token can be paired to
 // the InstanceID token.
  - (void)application:(UIApplication *)application  didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
   NSLog(@"APNs token retrieved: %@", deviceToken);

  // With swizzling disabled you must set the APNs token here.
 [[FIRInstanceID instanceID] setAPNSToken:deviceToken     type:FIRInstanceIDAPNSTokenTypeSandbox];
 }

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

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