FCM 成功,但设备未显示通知 iOS



我已经构建了自己的应用来接收 Firebase 通知。我通过 FCM 控制台对其进行了测试,设备收到了通知。但是,当我从testflight设备进行测试时,没有收到任何通知,但是当我检查有效载荷时,它显示成功。

1. Uploaded the production .p12 certificate in firebase.
2. Capabilities -> Background Modes = ON with Remote Notifications = true; 
PushNotifications = set to 'true'
3. In Info.plist FirebaseAppDelegateProxyEnabled = YES , 
FirebaseScreenReportingEnable = NO

这是我的代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
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) {
}];
} 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];
[FIRApp configure];
[self connectToFcm];
[FIRMessaging messaging].delegate = self;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tokenRefreshNotification:) name:kFIRInstanceIDTokenRefreshNotification object:nil];
}
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
[[FIRMessaging messaging] setAPNSToken:deviceToken type:FIRMessagingAPNSTokenTypeSandbox];
[FIRMessaging messaging].APNSToken = deviceToken;

}
- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {
self.DeviceId=fcmToken;
// Notify about received token.
NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"];
[[NSNotificationCenter defaultCenter] postNotificationName:
@"FCMToken" object:nil userInfo:dataDict];
}
- (void)applicationReceivedRemoteMessage:(FIRMessagingRemoteMessage *)remoteMessage {
NSLog(@"%@", remoteMessage.appData);
}
- (void)tokenRefreshNotification:(NSNotification *)notification {

[[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
NSError * _Nullable error) {
if (error != nil) {
NSLog(@"Error fetching remote instance ID: %@", error);
} else {
NSString *refreshedToken = result.token;
self.DeviceId = refreshedToken;
NSLog(@"InstanceID token: %@", refreshedToken);
NSLog(@"Remote instance ID token: %@", result.token);
}
}];

}
- (void)connectToFcm {
[[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
NSError * _Nullable error) {
if (error != nil) {
NSLog(@"Error fetching remote instance ID: %@", error);
} else {
NSLog(@"Remote instance ID token: %@", result.token);
}
}];
}

通过 restclient 对其进行了测试并得到了这个结果

{
"multicast_id": 4659854677338425000,
"success": 1,
"failure": 0,
"canonical_ids": 0,
"results": [
{
"message_id": "0:1569222922386579%12eeef7ecccfb49c"
}
]
}

为什么我的设备即使成功也没有显示通知?

任何想法/帮助将不胜感激。

我花了很多时间解决同样的问题。然后我发现当我使用 fcm 通知控制台发送测试消息时,我在通知中心的 iphone 上收到了通知。 但是在我的php应用程序服务器中,我从未得到过它。我总是变机器人。 然后我读了邮递员发送FCM,我得到了与fcm控制台相同的结果。 然后我发现问题是我的代码正在使用:

$fields = array(
'registration_ids' => $registration_ids,
'data' => $message,
);

然后我将其更改为匹配控制台和邮递员,它起作用了!

$fields = 
[
'to' => 'TOKEN',
'notification' => [
'title' => "It Works",
'body' => "12 hours later"
]
];

事实证明,每当我使用这个自定义数组时,它永远不会通过 IOS,但可以连接到 Android。 此外,现在在Android上,消息进入应用程序的通知中心,而不是在我的应用程序消息中心内。 希望这也对你有帮助。

您是否正确完成了"创建身份验证密钥"的设置?

https://firebase.google.com/docs/cloud-messaging/ios/certs

相关内容

  • 没有找到相关文章

最新更新