首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CloudKit CKShare网址无处可寻

CloudKit CKShare网址无处可寻
EN

Stack Overflow用户
提问于 2018-06-19 21:45:20
回答 1查看 593关注 0票数 1

我已经成功地将CKShare URL保存到CloudKit,并且可以看到用户是CloudKit仪表板中的INVITED。我的Mac应用程序给那个人发了电子邮件,但当他们点击它时,他们在icloud.com上看到的都是这个屏幕:

单击OK会使一切消失,所以您所看到的只是网页上的背景。

我的理解是,URL应该打开我的Mac应用程序,它将在我的应用程序委托中触发userDidAcceptCloudKitShareWith。但它什么也做不了。

这可能是因为我的应用程序正在开发中,而不是在Mac中吗?我需要一个自定义的URL方案来让它打开我的应用程序吗?

关于这些东西的文档非常稀少。我希望有人能提供任何帮助。

EN

回答 1

Stack Overflow用户

发布于 2018-06-20 17:57:04

我已经了解到,您必须为您的CloudKit容器指定一个备用URL。如果应用程序没有安装(或者没有被识别,就像我一样在使用Xcode进行开发时),CloudKit会将共享URL转发到您指定的某个位置。它们将唯一的共享ID附加到URL,以便您可以在自己的网页上处理它。

在CloudKit仪表板中,转到环境设置.,您将看到以下弹出:

我让它重定向到https://myapp.com/share/?id=,在它重定向到的网页上,我做了一个$_GET['id']来获取id。然后,我使用自定义URL方案再次重定向到我的应用程序,并传递共享ID (例如,myapp://abc123,其中abc123是共享ID)。

在我的应用程序委托中,我收到如下URL:

代码语言:javascript
复制
func application(_ application: NSApplication, open urls: [URL]) {
  if let url = urls.first, let shareId = url.host{
    fetchShare(shareId) //<-- sharedId = abc123
  }
}

然后,我使用CKFetchShareMetadataOperation查找共享的URL,并使用CKAcceptSharesOperation来接受它,如下所示:

代码语言:javascript
复制
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)
}

我认为有更简单的方法可以使用NSItemProviderNSSharingService来解决这个问题,但是我正在做很多定制的UI,并且希望完全控制共享工作流。

我希望这能帮上忙。:)

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

https://stackoverflow.com/questions/50937353

复制
相关文章

相似问题

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