iOS Share Extension能否调用主App执行任务及认证凭证共享方案咨询
iOS分享扩展同步认证状态及上传任务的可行实现方案
方案1:通过App Group安全共享认证凭证(推荐,无需唤起主App)
- 首先给主App和分享扩展两个Target都开启
App Group能力,勾选同一个Group ID,这是苹果官方提供的同开发者应用间安全共享数据的官方通道 - 主App登录获取AWS Cognito的访问令牌、刷新令牌后,将凭证存入
UserDefaults(suiteName: "你的App Group ID"),或者存入App Group共享的钥匙串项中,钥匙串存储方案安全性更高,还可支持跨设备iCloud同步(如果开启相关能力) - 分享扩展运行时直接从共享的UserDefaults/钥匙串读取凭证,直接在扩展内部完成图片上传,整个流程不需要用户跳转,你观察到的主流即时通讯应用的分享扩展均采用该方案实现
- 注意要在扩展中增加令牌有效期校验逻辑,如果检测到令牌过期,再跳转到主App完成刷新或者重新登录,避免发起无效请求
方案2:扩展传递资源后唤起主App完成上传
- 如果你不希望扩展直接接触认证凭证,可以先把分享的图片存入App Group的共享目录,再通过自定义scheme唤起主App,iOS 10+可以用
NSExtensionContext的open(_:completionHandler:)方法实现跳转 - 主App被唤起后,从共享目录读取图片,用自身存储的认证凭证完成上传,上传完成后可以删除共享目录的临时图片避免占用存储空间
- 注意该方案会触发主App前台唤起,如果希望后台处理需要配合Background Tasks相关能力,实现复杂度比方案1高,且如果用户主动杀了主App,流程会被中断
选型建议
如果上传逻辑不复杂,优先选择方案1,共享钥匙串存储凭证的安全性已经经过苹果官方的安全认证,不会有额外的安全风险,是当前行业内的通用实现方案。
内容的提问来源于stack exchange,提问作者alionthego
相关产品推荐
相关产品推荐

