- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已成功将 CKShare
URL 保存到 CloudKit,并且我可以在 CloudKit 仪表板中看到该用户已INVITED
。我的 Mac 应用程序通过电子邮件将 URL 发送给该人,但当他们单击该 URL 时,他们只能在 icloud.com 上的屏幕上看到它:
单击确定会使所有内容消失,因此您只能看到网页上的背景。
我的理解是,该 URL 应该打开我的 Mac 应用程序,它将在我的应用程序委托(delegate)中触发 userDidAcceptCloudKitShareWith
。但它什么也没做。
这可能是因为我的应用程序正在开发中,尚未出现在 Mac App Store 中吗?我是否需要自定义 URL 方案才能打开我的应用程序?
关于这些东西的文档非常稀疏。我希望有人能提供任何帮助。
最佳答案
我了解到您必须为 CloudKit 容器指定一个后备 URL。如果应用程序未安装(或未被识别,这似乎是像我一样在 Xcode 中进行开发构建时的情况),CloudKit 会将共享 URL 转发到您指定的位置。他们将唯一的共享 ID 附加到 URL,以便您可以在自己的网页上处理它。
在 CloudKit 仪表板中,转到环境设置...,您将看到此弹出窗口:
我将其重定向到 https://myapp.com/share/?id=
并在它重定向到的网页上,我执行了 $_GET['id' ]
来获取 id
。然后,我使用自定义 URL 方案再次重定向到我的应用程序并传递共享 ID(例如 myapp://abc123
,其中 abc123
是分享 ID)。
在我的应用程序委托(delegate)中,我收到如下 URL:
func application(_ application: NSApplication, open urls: [URL]) {
if let url = urls.first, let shareId = url.host{
fetchShare(shareId) //<-- sharedId = abc123
}
}
然后,我使用 CKFetchShareMetadataOperation
查找共享的 URL,并使用 CKAcceptSharesOperation
接受它,如下所示:
func fetchShare(shareId: String){
if let url = URL(string: "https://www.icloud.com/share/\(shareId)"){
let operation = CKFetchShareMetadataOperation(shareURLs: [url])
operation.perShareMetadataBlock = { url, metadata, error in
if let metadata = metadata{
//:::
acceptShare(metadata: metadata)
}
}
operation.fetchShareMetadataCompletionBlock = { error in
if let error = error{
print("fetch Share error: \(error)")
}
}
CKContainer.default().add(operation)
}
}
func acceptShare(metadata: CKShareMetadata){
let operation = CKAcceptSharesOperation(shareMetadatas: [metadata])
operation.acceptSharesCompletionBlock = { error in
if let error = error{
print("accept share error: \(error)")
}else{
//Share accepted!
}
}
CKContainer.default().add(operation)
}
我认为使用 NSItemProvider
和 NSSharingService
有更简单的方法来解决这个问题,但我正在做很多自定义 UI,并希望完全控制分享工作流程。
我希望这对某人有帮助。 :)
关于CloudKit CKShare URL 无处可去,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50937353/
我已成功将 CKShare URL 保存到 CloudKit,并且我可以在 CloudKit 仪表板中看到该用户已INVITED。我的 Mac 应用程序通过电子邮件将 URL 发送给该人,但当他们单击
场景 UserA 与 UserB 共享 5 条记录 UserC 与 UserB 共享 3 条记录 UserD 与 UserB 共享 10 条记录 UserB 已接受所有这些共享。 目标 我想为 Use
我需要了解: 当记录不再与我共享时 当权限从readwrite 更改为仅read 有可能吗? 最佳答案 哦,答案很简单: let shareSubscription = CKQuerySubscrip
我正在尝试在我的应用程序中实现云套件共享,但是,每当我尝试使用 UICloudSharingController 共享项目时,我都会收到一致的错误: 我会看到用于添加人员的初始共享弹出窗口,然后当我选
对于现在和单个共享,我是这样做的: //here I have access to record fetched from cloud database let controller = UIClou
我试图允许我的应用程序的用户能够检索他们已经共享的记录的 iCloud 共享链接。我可以在创建共享时通过使用 let share = CKShare(rootRecord: CKRecord) 和 A
我在保存 CKShare 时遇到了问题。执行共享时,一切正常,但如果取消共享并尝试再次共享,我会收到错误消息: "Server Record Changed" (14/2004); server me
我正在研究 Apple 今年发布的新 CKShare,我对它有一些疑问。我试图关注 WWDC 的“CloudKit 的新功能”视频,但部分代码在 Xcode 中不再有效。 我想做的是:用户将输入他的姓
我正在尝试保存一个 CKRecord(已经创建并保存到数据库)和一个新的 CKShare 到它,但我一直收到这个错误:Optional("Failed to modify some records")
我是一名优秀的程序员,十分优秀!