美文网首页
AppGroups数据共享

AppGroups数据共享

作者: OwenWong | 来源:发表于2019-03-11 14:49 被阅读0次

常见使用场景1:APP之间数据共享(如账号登录)
常见使用场景2:容器APP与扩展应用之间资源共享(如:iMessage、keyboard等)

一、认识App Groups

AppGroup allows data sharing between two different apps or even app and widgets by creating one common shared path (like document directory). Data saved over there can be accessed by any app which is associated with that particular AppGroup. It is an offline data sharing between apps.
这段苹果说明告诉我们:App Groups可以使两个不同的APP(或者APP与其Extension)之间进行数据共享。

二、配置APP Groups

  1. 在Apple Developer中配置APP的App ID时,勾选AppGroups选项:


    勾选AppGroups.png
  2. 创建APP Groups:


    创建AppGroups.png

    这个id默认是要group.打头,并且是不能去掉的。常用命名方法是:'group.'+BundleID。

  3. 将APP Groups添加到APP ID中。回到步骤1创建的APP ID那里,可以看到APP Groups选项为黄色待编辑状态,点击Edit将步骤2创建的APP Groups添加进去:


    添加AppGroups到APP ID.jpeg
  4. 将APP Groups添加到Xcode工程中:


    AppGroups工程配置.png

    添加完成之后将在项目中生成一个xxx.entitlements文件(这其实就是一个xml配置文件,事实上日后如果添加其他服务如Push Notifications,其配置也会添加到这个文件中)

三、APP Group在项目中的使用

App Groups支持的常用数据共享包括NSUserDefaults、NSFileManager、NSFileCoordinator、NSFilePresenter、UIPasteboard、KeyChain、NSURLSession等。
下边以NSUserDefaults和NSFileManager为例:

生成数据部分

#pragma mark - NSUserDefaults
- (void)setAppGroup1
{
    NSUserDefaults *myDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.test.appgroup"];//此处id要与开发者中心创建时一致
    [myDefaults setObject:@"value" forKey:@"key"];
    NSLog(@"%@", [myDefaults valueForKey:@"key"]);
}
#pragma mark - NSFileManager
- (void)setAppGroup2{
    //获取分组的共享目录
    NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.test.appgroup"];//此处id要与开发者中心创建时一致
    NSURL *fileURL = [groupURL URLByAppendingPathComponent:@"demo.txt"];
    //写入文件
    [@"abc" writeToURL:fileURL atomically:YES encoding:NSUTF8StringEncoding error:nil];
    //读取文件
    NSString *str = [NSString stringWithContentsOfURL:fileURL encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"str = %@", str);
}

获取共享数据部分

#pragma mark - NSUserDefaults
- (void)getByAppGroup1
{
    NSUserDefaults *myDefaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.test.appgroup"];//此处id要与开发者中心创建时一致
    NSString *content = [myDefaults objectForKey:@"key"];
    NSLog(@"%@",content);
}
#pragma mark - NSFileManager
- (void)getByAppGroup2{
    //获取分组的共享目录
    NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.test.appgroup"];//此处id要与开发者中心创建时一致
    NSURL *fileURL = [groupURL URLByAppendingPathComponent:@"demo.txt"];
    //读取文件
    NSString *str = [NSString stringWithContentsOfURL:fileURL encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"str = %@", str);
}

参考链接:
https://www.jianshu.com/p/94d4106b9298
https://www.jianshu.com/p/aa6f4f41d6e3
https://www.cnblogs.com/kenshincui/p/5644803.html

相关文章

  • AppGroups数据共享

    常见使用场景1:APP之间数据共享(如账号登录)常见使用场景2:容器APP与扩展应用之间资源共享(如:iMessa...

  • iOS AppGroups数据共享

    需求:公司多个app之间数据共享注意:此方法只能使用于同一个开发者账号!!! 1.登录开发者账号,创建App Gr...

  • SAAS软件架构——数据层架构实践

    1. 多租户数据架构三种模式: ①独立数据库②共享数据库、独立 Schema③共享数据库、共享 Schema、共享...

  • 小程序全局共享数据--存储

    1. 前言 全局共享数据 或者叫页面状态管理? 2. 全局共享数据 如果叫全局共享数据的话 其实用globalDa...

  • Android《第五章:ContentProvider》

    ContentProvider(外共享数据) ContentProvider在Android中的作用是对外共享数据...

  • 设计模式(十四)-享元模式

    享元模式 享元模式,共享内存,节约内存空间,相同的数据共享使用,主要对数据、方法共享分离,将数据的方法分为内部数据...

  • Java基础 --- static

    static --- 数据共享 1 为什么会出现 static (作用) static --- 数据共享 如果很...

  • 数据共享

    容器与host共享数据 容器之间共享数据 volume container data-packed volume ...

  • 状态管理-MultiProvider

    ? 多数据共享使用MultiProvider,在providers中定义所有的共享数据: ? Widget中使...

  • Vuex的组成

    数据共享

网友评论

      本文标题:AppGroups数据共享

      本文链接:https://www.haomeiwen.com/subject/btbvpqtx.html