首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户在接受记录并启动应用程序时无法打开CKShare记录

用户在接受记录并启动应用程序时无法打开CKShare记录
EN

Stack Overflow用户
提问于 2020-05-20 06:50:34
回答 2查看 123关注 0票数 0

按照我的方式来实现CloudKit的CKShare功能。我已经被管理去分享一条记录(例如通过电子邮件),也可以确认用户收到了邀请。问题是,当用户接受记录时,应用程序会弹出,但什么也不会发生。为了提供帮助,这里有一些应用程序的关键元素,如果我错了,请告诉我。

1)应用程序不要求用户使用其Apple ID登录

2)当我用线缆将手机连接到电脑时(也就是还没有使用TestFlight ),我通过两个不同的手机(使用不同的Apple i)上构建的直接应用程序进行测试。

3)我已签入CloudkitDashboard,我可以看到已共享的记录,也可以看到已记录的已共享,但我看到的不是我发送邀请的用户电子邮件,而是我的电子邮件和记录已被“接受”的事实

4)我已经在Info.plist文件中添加了CKSharingSupported密钥。

5)用于接受CKShare的AppDelegate.swift文件中的代码如下。我希望您注意到,字符串"User Accepted the Share“从来没有打印出来,这让我认为这部分代码永远不会运行。

函数应用程序(应用程序: UIApplication,userDidAcceptCloudKitShareWith cloudKitShareMetadata: CKShare.Metadata) {

代码语言:javascript
复制
    print("User Accepted the Share")
    let acceptShareOperation: CKAcceptSharesOperation = CKAcceptSharesOperation(shareMetadatas: [cloudKitShareMetadata])

    acceptShareOperation.qualityOfService = .userInteractive
    acceptShareOperation.perShareCompletionBlock = {meta, share,
        error in
        print("The Record Share was Accepted")
    }
    acceptShareOperation.acceptSharesCompletionBlock = {
        error in
        /// Send your user to where they need to go in your app
        let viewController: SNPDetailsViewController = self.window?.rootViewController as! SNPDetailsViewController
        viewController.fetchShare(cloudKitShareMetadata)
    }
    CKContainer(identifier:
        cloudKitShareMetadata.containerIdentifier).add(acceptShareOperation)
}

任何洞察力,引导我在哪里错了,将非常感谢。

谢谢您抽时间见我!

EN

回答 2

Stack Overflow用户

发布于 2020-05-23 01:06:35

有关更多上下文,请参阅此答案:CloudKit CKShare URL Goes Nowhere

但要确保:

在Xcode中,如果您为重定向到application.

  • Inside应用程序的CloudKit容器指定后备URL,则需要设置一个URL方案,以便像yourapp://这样的自定义URL将打开您的应用程序,并将后备URL中的查询参数传递到Xcode中
票数 1
EN

Stack Overflow用户

发布于 2020-06-02 04:12:13

经过几周的反复试验、研究和幸运,我终于找到了问题所在。所有教程和在线解决方案都与接受CKShare记录的AppDelegate.swift中的以下代码相关:

代码语言:javascript
复制
func application(_ application: UIApplication, userDidAcceptCloudKitShareWith    cloudKitShareMetadata: CKShare.Metadata) {
  let acceptShareOperation: CKAcceptSharesOperation = CKAcceptSharesOperation(shareMetadatas: [cloudKitShareMetadata])
  acceptShareOperation.qualityOfService = .userInteractive
  acceptShareOperation.perShareCompletionBlock = {meta, share,
        error in
            DispatchQueue.main.async() {
                print("The Record Share was Accepted")
            }
        }
       acceptShareOperation.acceptSharesCompletionBlock = {
        error in
            guard (error == nil) else{
                print("Error \(error?.localizedDescription ?? "")")
                return
            }
        let viewController: SNPDetailsViewController = self.window?.rootViewController as! SNPDetailsViewController
        viewController.fetchShare(cloudKitShareMetadata)
       }
    CKContainer(identifier:
        cloudKitShareMetadata.containerIdentifier).add(acceptShareOperation)
}

在我的例子中,解决方案是将其添加到SceneDelegate.swift中的以下函数中:

代码语言:javascript
复制
func windowScene(_ windowScene: UIWindowScene, userDidAcceptCloudKitShareWith cloudKitShareMetadata: CKShare.Metadata) {
(add above code)
}

希望这对其他人有帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61902104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档