当iOS应用程序被强制关闭时如何处理类似于WhatsApp的通知?

4
我正在创建一个类似于WhatsApp的聊天应用程序,并尝试实现类似于WhatsApp的通知功能。在WhatsApp中,当您收到通知时,它会将数据存储在某个位置,当您关闭Wi-Fi并进入应用程序时,消息将注入应用程序。这意味着WhatsApp即使应用程序关闭也可以访问通知。 我的方法:我在后台模式下接收通知并将其保存到文件中。因此,如果用户断开与互联网的连接并进入应用程序,则消息仍将在applicationWillAppear上注入。这很完美,但是当您强制关闭应用程序(双击主页并向上滑动应用程序)时,它不起作用。我已经搜索了几乎所有内容,并且说如果您强制关闭应用程序,则后台获取将无法工作。
那么WhatsApp是如何做到的呢?还有其他解决方案吗? 我的解决方案: 从XCode中打开后台获取和远程通知的后台模式。接下来,在application:willFinishLaunchingWithOptions:中添加以下代码。
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];

在AppDelegate.m文件中添加以下内容:

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

  NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);

  if (0 < [paths count]) {
    NSString *documentsDirPath = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirPath stringByAppendingPathComponent:@"notification.txt"];

    NSString *content = [NSString stringWithFormat:@"%@", userInfo];
    NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];

    NSFileManager *fileManager = [NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:filePath]) {
      // Append text to the end of file
      NSFileHandle *fileHandler = [NSFileHandle fileHandleForWritingAtPath:filePath];
      [fileHandler seekToEndOfFile];
      [fileHandler writeData:data];
      [fileHandler closeFile];
    } else {
      // Create the file and write text to it.
      [content writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
    }
  }

  handler(UIBackgroundFetchResultNewData);

}

更新:我的通知中有以下标志

content-available: 1

如果您已经将数据保存到文件中,为什么还需要后台获取? - Teja Nandamuri
@PrajeetShrestha,这就是我正在做的事情。它可以在后台工作,但是当它被强制关闭时就不行了。 - Nakib
你试过这个吗:https://dev59.com/xmct5IYBdhLWcg3wZcqL - Teja Nandamuri
@TejaNandamuri 这是完全不同的情况。这是关于当应用程序通过点击通知启动时该怎么做的问题。 - Nakib
如果你强制关闭应用程序,就无法进行后台获取。你必须重新启动应用程序并再次进行获取! - Teja Nandamuri
显示剩余4条评论
1个回答

3

后台推送不会被发送到用户终止的应用程序。

除非它是VoIP推送,在这种情况下,如果必要的话,操作系统将启动应用程序(但是是的,只有在您的应用程序向用户提供VoIP功能时才能使用VoIP推送。)


@the-pumping-lama WhatsApp可以在不启动应用程序的情况下完成此操作。 - Nakib
1
你需要为应用程序添加后台模式的voip功能,并使用一个与常规ssl推送证书不同的voip服务证书。Voip推送通知的实现方式与常规推送不同,它们是使用推送工具包完成的。 - Gruntcakes
我会查看Push Kit和VoIP推送通知。 - Nakib
它已经进入了后台状态。iOS没有像Android那样的服务等效物。 - Gruntcakes
1
@Ravi H Malviya,如果您的应用程序向用户提供VoIP功能,则可以使用VoIP推送。 - Gruntcakes
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接