我正在创建一个像whatsapp这样的聊天信使应用,并试图实现类似于whatsapp的通知功能。在whatsapp中,当您收到通知时,它会将数据存储在某个地方,当您关闭wifi并进入应用程序时,消息将被注入应用程序中。这意味着即使应用程序关闭,whatsapp也会以某种方式访问通知。
我的方法:我在后台模式下收到通知并将其保存到文件中。因此,如果用户与互联网断开连接并进入应用程序,则仍会在 applicationWillAppear 上注入消息。这是完美的,但当你强行关闭你的应用程序(双击主页并向上滑动应用程序)它不起作用。我几乎搜索了所有内容,并且如果您强行关闭应用程序,则说背景提取将无效。
那么whatsapp是如何做到的?什么是其他解决方案?
我的解决方案:
打开背景提取和XCode远程通知的后台模式。接下来在应用程序中添加以下代码: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
答案 0 :(得分:3)
后台推送不会传递给用户终止的应用。
除非是voip push,否则应用程序将在必要时由操作系统启动(但是,如果您的应用为用户提供了voip功能,则只能使用voip push。)
答案 1 :(得分:0)
您可以通过静默推送通知(即使应用程序终止也在后台运行应用程序)来实现此目的,以修改推送 有效载荷
{
aps = {
"content-available" : 1,
sound : ""
};
}