2021年6月11日星期五

IOS小组件(8):App与Widget数据共享

引言

  Widget是一个迷你版的App,IOS有沙盒机制,不同App之间无法直接共享数据。组件和主App之间其实就是不同App的关系,所以也无法通过userdefaults.standard来传数据,苹果为了在不打破沙盒的前提下能够传数据,就想出了App Group的方法。

数据共享方式

 可以通过网络和本地数据两种方式进行数据的共享,本地数据共享可以通过 App Groups。

App Groups 原理

  它是 iOS 8 之后推出的在 App 之间共享数据的方式,只需要简单的配置就可以实现数据的共享。它主要用于同一group下的app共享同一份读写空间,以实现数据共享。编码 App Groups只能异步同步数据,当Widget读取数据的时候,只能读之前手机App保存的数据,相反也是如此。当手机App有新的数据保存时,不能及时的通知Widget更新数据,只能是Widget下次去主动获取数据。

配置证书

  由于widget项目和主项目其实是两个独立的appID,因为需要单独给widget配置证书,配置证书的过程参考APP证书配置;

开启APP Groups

  开启APP Groups是为了widget和app之间实现数据共享;为了便于后续操作,请先确保你的开发者账号在Xcode上处于登录状态。

在app中开启:

    • TARGETS-->AppExtensionDemo-->Capabilities-->App Groups
    • 找到以后,将App Groups右上角的开关打开,然后选择添加groups,注意命名要规范,比如:group.com.company.app;

在extension中开启

假设创建widget target的名称为TodayExtension,对应的App Group位于

  • TARGETS-->TodayExtension-->Capabilities-->App Groups
  • 开启的方式和APP中一样,注意必须要保证这里的App Groups名称和APP中相同。

App Groups特点

  App Group容器只是在宿主app运行期间才存在,其中的容器用于扩展与宿主的文件共享,宿主被关闭了,共享也就没意义了。
以上来自于实际测试,测试过程是:在宿主app运行期间,点击其中的按钮弹出模态视图控制器,进行数据填充。完成后保存数据到App Group容器中的文件中,以供today extension扩展进行数据使用。只要将宿主app杀掉后重启启动宿主app,today extension 中已经显示的数据就完全没有了。单纯将宿主app杀掉不重启,today extension的任然hi显示之前的内容。由于宿主app中显示的数据也是从app group中的文件中取出来的,所以数据也没了。

  由于这个共享机制的特殊性,这个容器不能用来长期保存文件!!!应该将文件存储到宿主app的文件夹中,可以长期存储。today extension展示的数据量较少,在合适的时候将其需要的数据搬运到app group中!

共享数据核心代码

FileManager实现创建一个文件夹

/* * 创建并返回目录路径URL */static private func makeShareFolderExists(folderName: String) -> URL? {    let documentsDirectory = FileManager().containerURL(forSecurityApplicationGroupIdentifier: groupId)    guard let folderURL = documentsDirectory?.appendingPathComponent(folderName) else { return nil}        var isDir : ObjCBool = false    var isExists = FileManager.default.fileExists(atPath: folderURL.path, isDirectory: &isDir)    if isExists && !isDir.boolValue {        do {            try FileManager.default.removeItem(at: folderURL)            isExists = false;        } catch {            return nil        }    }    if !isExists {        do {            try FileManager.default.createDirectory(atPath: folderURL.path, withIntermediateDirectories: true, attributes: nil)        } catch {            return nil        }    }    return folderURL}

  更多 FileManager 请查看官网Api https://developer.apple.com/documentation/foundation/filemanager/

参考

  • extension和containing app以及host app关系
  • AppGroups Xcode配置
  • App之间的数据共享——App Groups的账户配置和本地Xcode配置

结语

  本文讲解了App与小组件的数据共享方式是用App Groups机制来实现的,配置相关的请参考其他文章里面的详细操作步骤。另外请特别注意App Groups里面的数据不是永久的,只是暂存而已









原文转载:http://www.shaoqun.com/a/795574.html

跨境电商:https://www.ikjzd.com/

贝贝母婴网:https://www.ikjzd.com/w/1321

全球速卖通:https://www.ikjzd.com/w/81

tradeindia:https://www.ikjzd.com/w/2305

跨境通电子商务:https://www.ikjzd.com/w/1329


引言  Widget是一个迷你版的App,IOS有沙盒机制,不同App之间无法直接共享数据。组件和主App之间其实就是不同App的关系,所以也无法通过userdefaults.standard来传数据,苹果为了在不打破沙盒的前提下能够传数据,就想出了AppGroup的方法。数据共享方式 可以通过网络和本地数据两种方式进行数据的共享,本地数据共享可以通过AppGroups。AppGroups原理  
痛点分析:https://www.ikjzd.com/tl/14381
亚马逊调研表和分析表及尺寸工具包:https://www.ikjzd.com/tl/14383
站内点击曝光排名跟踪表一:https://www.ikjzd.com/tl/14385
1号店网:https://www.ikjzd.com/w/2263
bol:https://www.ikjzd.com/w/291
沃尔玛:https://www.ikjzd.com/w/220
长得性感也有错吗 农村公婆说我是三陪:http://lady.shaoqun.com/a/271951.html
浪货嗯,这么湿还说不要 小浪货,你这里面又软又紧:http://www.30bags.com/a/255275.html
色狼老公往女邻居的深V领里塞钱:http://www.30bags.com/m/a/252431.html
男女谈恋爱的技巧和方法:虽然什么都懂,但能做到几个?:http://www.30bags.com/a/383385.html
新手必读 | 跨境人口中的"独立站"是什么?:https://www.ikjzd.com/articles/145698
男女谈恋爱的技巧和方法:虽然什么都懂,但能做到几个?:http://lady.shaoqun.com/a/365124.html

没有评论:

发表评论