gpt4 book ai didi

swift - 如何允许任何用户访问 Firestore 中 "uid"下的数据?

转载 作者:行者123 更新时间:2023-11-30 10:43:31 25 4
gpt4 key购买 nike

我正在构建一个应用程序,我希望用户能够使用 URL 方案点击 URL 并将其发送到我的应用程序上的特定 View Controller 。工作正常。但是,我还需要将特定数据获取到该 View Controller 上。我需要它,以便用户 A 可以通过消息向用户 B 发送邀请 (URL)。用户 B 可以点击该邀请 (URL) 打开一个屏幕,其中包含有关来自 Firebase 的邀请的详细信息。然后,用户可以接受邀请,或拒绝邀请。

我已经像这样设置了我的数据库:

users(collection)

"uid"(document)

parties(collection)

"partyName"(document)

respondedYes(field)

respondedNo(field)

这是 AppDelegate 中供某人点击 URL 的代码。

func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
// Open the RSVPViewController.
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rsvpViewController = storyboard.instantiateViewController(withIdentifier: "RSVPViewController") as! RSVPViewController

if let window = self.window, let rootViewController = window.rootViewController {
var currentController = rootViewController
while let presentedController = currentController.presentedViewController {
currentController = presentedController
}
currentController.present(rsvpViewController, animated: true, completion: nil)
}
return true
}

我不知道如何获取它,所以我知道用户 B 点击 URL 后正在显示哪个邀请,因此我无法显示数据。如何让我的应用程序像我在第一段的概念中解释的那样工作?如果您需要更多信息,请告诉我。真的很难解释我需要什么帮助。

最佳答案

在这种情况下,邀请 URL 需要包含参数来告诉您的应用用户 B 正在打开哪个邀请。这可以通过 URL 中的简单 GET 参数来实现。例如,您的 URL 现在可能如下所示:myapp:Invite?invite_id=2 ,其中invite_id param 将在用户 B 打开应用程序时处理。

由于允许其他用户访问第一个用户的 UID 下的数据并不是最好的主意,因此我会在 firestore 上创建一个新的“邀请”集合,其中当用户 A 发送邀请文档时会创建一个新的邀请文档。新创建的邀请文档的 UUID 将是您在上面的 URL 中发送的参数。

要创建此 URL,请参阅 this answer ,基本上你会执行以下操作:

let queryItems = [NSURLQueryItem(name: "invite_id", value: "123")]
let urlComps = NSURLComponents(string: "myapp:Invite")!
urlComps.queryItems = queryItems
let URL = urlComps.URL!

现在,在 application(_:,handleOpen:) (对于接收者的应用程序)您可以通过扩展 URL 来解析 URL 参数类如 this answer 中所述。

假设您使用链接答案中描述的扩展(我在此处推荐之前在 Playground 上进行了测试),您可以按如下方式重写您的函数:

func application(_ application: UIApplication, handleOpen url: URL) -> Bool {

let invite_id = url.valueOf("invite_id")

// get data from firestore for this invite id and store it in a struct called invite_data
// (i'm going to assume that the variable invite_data is defined now).

// Open the RSVPViewController.
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rsvpViewController = storyboard.instantiateViewController(withIdentifier: "RSVPViewController") as! RSVPViewController

// tell the rsvpViewController about the data:
// this assumes you have a variable in rsvpVC that takes this info to display it.
rsvpViewController.invite_data = invite_data

if let window = self.window, let rootViewController = window.rootViewController {
var currentController = rootViewController
while let presentedController = currentController.presentedViewController {
currentController = presentedController
}
currentController.present(rsvpViewController, animated: true, completion: nil)
}
return true
}

请注意invite_data上面是一个结构体,可以包含您在 RSVP VC 中显示相关详细信息以及处理接受或拒绝邀请等事务所需的任何信息。

另一种方法是简单地发送您想要在 rsvpViewController 中显示的所有数据。不用费心去准备邀请文件。如果字段数量较少,可能会更容易。但我怀疑在这种情况下你会想要传递像 party_id 这样的东西等等,所以取决于您的用例。

关于swift - 如何允许任何用户访问 Firestore 中 "uid"下的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56308857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com