Итак, в моем предыдущем вопросе я закончил выяснением своей собственной проблемы (я бы рекомендовал взглянуть на нее, прежде чем читать этот), но 20 секунд славы были прерваны, когда я понял, что результат был одинаковым для всех пользователей в приложении, чего я не хотел и о чем совершенно забыл.
С помощью функции, расположенной ниже, я могу приобрести мероприятие, и кнопки будут отображаться для этого события и исчезнут, если я отменил его, и он уникален для каждого мероприятия, которое я обожаю. Проблема с приведенной ниже функцией заключается в том, что если я совершаю покупку в учетной записи user1, а кнопки отображаются и остаются там, как должны, когда я вхожу в учетную запись user2 и, возможно, захочу приобрести то же событие, кнопки уже появляются, хотя user2 ничего не сделал.
getSchoolDocumentID { (schoolDocID) in
if let schID = schoolDocID {
self.db.document("school_users/\(schID)/events/\(self.selectedEventID!)").getDocument { (documentSnapshot, error) in
if let error = error {
print("There was an error fetching the document: \(error)")
} else {
guard let docSnap = documentSnapshot!.get("purchased") else {
return
}
if docSnap as! Bool == true {
self.viewPurchaseButton.isHidden = false
self.cancelPurchaseButton.isHidden = false
self.creditCard.isHidden = true
self.purchaseTicketButton.isHidden = true
} else {
self.creditCard.isHidden = false
self.purchaseTicketButton.isHidden = false
}
}
}
}
}
Я попытался решить проблему самостоятельно, но наткнулся на препятствие. Я попытался создать подколлекцию events_bought
, когда пользователи покупают событие, и сохранить детали в полях, которые я могу позже вызвать в запросе. Это было то, что я думал, что смогу использовать, чтобы сделать покупки уникальными для всех пользователей.
Приведенная ниже функция просматривает подколлекцию events_bought
, вытаскивает поле и сопоставляет его с фрагментом данных на отображаемом виртуальном канале, проблема в том, что если событие не было приобретено, и я продолжаю его с этим пользователем, он вылетает и говорит, как Путь ссылки на документ имеет неправильное количество сегментов, которые я не могу получить, потому что он такой же, как и функция выше, поэтому я понял, что путь не существует, и попытался выяснить способы проверки пути и придумал функцию снизу.
getEventsBoughtEventID { (eventBought) in
if let idOfEventBought = eventBought {
let docPath = self.db.document("student_users/\(self.user?.uid)/events_bought/\(idOfEventBought)")
if docPath.path.isEmpty {
self.creditCard.isHidden = false
self.purchaseTicketButton.isHidden = false
} else {
self.db.document("student_users/\(self.user?.uid)/events_bought/\(idOfEventBought)").getDocument { (documentSnapshot, error) in
if let error = error {
print("There was an error trying to fetch this document: \(error)")
} else {
guard let docSnapEventName = documentSnapshot!.get("event_name") else {
return
}
if docSnapEventName as! String == self.selectedEventName! {
self.viewPurchaseButton.isHidden = false
self.cancelPurchaseButton.isHidden = false
self.creditCard.isHidden = true
self.purchaseTicketButton.isHidden = true
}
}
}
}
}
}
Я не был уверен, сработает это или нет, поэтому попытал счастья, но все равно получаю те же ошибки ссылки на документ. Если бы кто-нибудь мог понять, как я могу проверить путь к документу и использовать логику для выполнения определенных вещей, это было бы здорово. Спасибо.