远程通知无法按预期工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了远程通知无法按预期工作相关的知识,希望对你有一定的参考价值。

我正在尝试让我的远程通知正常工作,但我遇到了一些问题。

我正在从我的服务器发送通知,其中content-available标志设置为1,这样我的didReceiveRemoteNotification被触发,并通过触发didReceiveRemoteNotification中的以下方法向用户显示通知:

- (void) showPush:(NSString *)message
{

  UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];

  UNMutableNotificationContent *content = [UNMutableNotificationContent new];
  content.body = message;
  content.sound = [UNNotificationSound defaultSound];

  NSString *identifier = @"UYLLocalNotification";
  UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:identifier
                                                                        content:content trigger:nil];

  [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
    if (error != nil) {
      NSLog(@"Something went wrong: %@",error);
    }
  }];
}

应用程序处于挂起状态时发送的通知根本不会显示,但会在应用程序打开然后再次关闭后显示,如下所示:

-> App is suspended: notification is sent
-> App is opened and in  the foreground: I can see that the notification has been processed
-> App is closed and in the background: notification is being displayed with a banner

任何关于为什么这不能按预期工作的建议将不胜感激。

答案

我想你需要从稍微不同的app delegate回调中调用showPush

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

这个回电注释的文档:

与应用程序(_:didReceiveRemoteNotification :)方法不同,该方法仅在应用程序在前台运行时调用,系统会在您的应用程序在前台或后台运行时调用此方法。

见:https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623013-application?language=objc

另一答案

通知可以是面向用户的(警报,徽章或声音)或静默(内容可用)。他们不可能两者兼而有之。

当通知包含面向用户的元素和指示静默推送APNS的内容可用标志时,设备将进入未定义状态。

以上是关于远程通知无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

带有导航组件的 Android 深层链接无法按预期工作

Flutter 本地通知在 IOS 上未按预期工作

Firebase - 推送通知 - 没有按预期工作

CKReference 的 CloudKit 订阅通知未按预期工作

Autofac为新线程创建子范围不能按预期工作“无法解析实例,无法创建嵌套生命周期......”

初学者AngularJS代码无法按预期工作[重复]