按照我的方式来实现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) {
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)
}任何洞察力,引导我在哪里错了,将非常感谢。
谢谢您抽时间见我!
发布于 2020-05-23 01:06:35
有关更多上下文,请参阅此答案:CloudKit CKShare URL Goes Nowhere
但要确保:
在Xcode中,如果您为重定向到application.
yourapp://这样的自定义URL将打开您的应用程序,并将后备URL中的查询参数传递到Xcode中发布于 2020-06-02 04:12:13
经过几周的反复试验、研究和幸运,我终于找到了问题所在。所有教程和在线解决方案都与接受CKShare记录的AppDelegate.swift中的以下代码相关:
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中的以下函数中:
func windowScene(_ windowScene: UIWindowScene, userDidAcceptCloudKitShareWith cloudKitShareMetadata: CKShare.Metadata) {
(add above code)
}希望这对其他人有帮助!
https://stackoverflow.com/questions/61902104
复制相似问题