美文网首页小技巧
App Group---APP之间数据共享

App Group---APP之间数据共享

作者: 枫叶1234 | 来源:发表于2020-07-24 17:22 被阅读0次
    • 实际开发中,我们也许会有这种需求:公司有两个APP,当用户登录其中一个APP后,在下载第二个APP的时候,可以实现自动登录的功能。
    • 这种情况如何实现呢?我之前的项目一直都是用第三方类库KeychainAccess实现的钥匙串分享数据的模式Keychain share。但是几天前查资料,开始认识另外一种方式,不依赖第三方库就可以实现,那就是APP Groups。iOS8新开放的功能

    配置APP Groups

    • 创建两个APP,并且在Apple Developer中创建两个APP的id创建APPid时,在APP Groups复选框打上对钩,当我们配置完成App ID之后,会发现App Groups是Configurable状态,这是因为咱们还没有配置相应的app groups,别着急,咱们等会再来管它。
    • 还是要打开Apple Developer,在id那一组中又一个App Groups选项,我们新创建一个APP Groups,


      image.png

    这里一共有两个选项,第一个是我们这个app group的描述,第二个是我们app group的id。这个id默认是要group.打头,并且是不能去掉的。

    • 现在去配置新创建的两个APP ID,因为再创建的时候勾选了APP Groups,但是并没有配置它,所以它回事黄色的状态,现在点击Edit,进入之后选择新创举的groups。


      image.png
    • 点击Edit---勾选上刚创建好的App Group----配置完成,在返回来看一下咱们的App ID,完美~Enabled状态了。

    配置Xcode中的APP Groups

    • 分别打开两个程序,切换到Capabilities选项卡,找到App Groups选项,刷新一下,将App developer中的App Groups同步下来,然后勾选上咱们刚才创建的开发组。


      image.png
    • 当我们配置完以后,会在文件目录下多出来一个.entitlements的文件。

    如何实现数据共享

    配置工作做完了,接下来,就是我们的代码表现的时间了。
    在这里,我只创建了一个.txt来存储数据,其他类型的持久化存储同理

    • 首先是Main App写入数据
    //Main App 通过TextField来向共享文件appGroup.txt中写入数据
    - (void)textFieldDidEndEditing:(UITextField *)textField {
        //获取App Group的共享目录
        NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.simon.app.test"];
        NSURL *fileURL = [groupURL URLByAppendingPathComponent:@"appGroup.txt"];
    
        //写入文件
        [textField.text writeToURL:fileURL atomically:YES encoding:NSUTF8StringEncoding error:nil];
    }
    
    • 接下来是两一个APP读取数据
    //Sub App 通过获取appGroup.txt中的数据,展现在label上
    
    //获取App Group的共享目录
        NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.simon.app.test"];
        NSURL *fileURL = [groupURL URLByAppendingPathComponent:@"appGroup.txt"];
    
        //读取文件
        NSString *str = [NSString stringWithContentsOfURL:fileURL encoding:NSUTF8StringEncoding error:nil];
        self.shareLabel.text = str;
    
    • containerURLForSecurityApplicationGroupIdentifier,没错,就是这个方法,用来在share path中创建share document。

    • NSUserDefaults使用

    //初始化一个供App Groups使用的NSUserDefaults对象
    NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.company.appGroupName"];
    
    //写入数据
    [userDefaults setValue:@"value" forKey:@"key"];
    
    //读取数据
    NSLog(@"%@", [userDefaults valueForKey:@"key"]);
    

    相关文章

      网友评论

        本文标题:App Group---APP之间数据共享

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