iOS Firebase Stripe集成:push()与pushId等效实现及支付源处理问询
iOS环境下Firebase实时数据库push()与pushId的等效实现
嘿,针对你提到的Firebase+Stripe集成里的push()和pushId问题,我给你梳理下iOS端的对应实现方式:
首先得明确:Firebase实时数据库里的push()方法,核心作用是生成一个唯一的、带时间戳排序的节点ID(也就是示例里的{pushId}),用来避免写入冲突,同时有序存储多条支付来源数据。在iOS SDK里,这个逻辑的等效实现非常直接:
1. 生成等效于push()的节点引用
用Firebase iOS SDK的childByAutoId()方法,它和Web端的push()完全对应,会自动生成唯一的节点ID。示例代码如下:
// 假设你已经获取到当前用户的userId和Stripe返回的token let userId = Auth.auth().currentUser?.uid ?? "" let stripeTokenId = "从Stripe获取的支付令牌ID" // 构建到sources节点的引用 let sourcesRef = Database.database().reference() .child("stripe_customers") .child(userId) .child("sources") // 调用childByAutoId()生成带唯一ID的新节点引用,对应Web端的push() let newSourceNodeRef = sourcesRef.childByAutoId()
2. 获取等效于pushId的节点ID
如果需要提前拿到这个自动生成的ID(也就是示例里的{pushId}),直接访问引用的key属性即可:
let pushId = newSourceNodeRef.key // 这就是你要的pushId等效值
3. 写入支付令牌到对应路径
最后把Stripe支付令牌写入到{pushId}/token路径下,这样就能触发你Cloud Functions里的onWrite触发器:
// 准备要写入的数据 let tokenData = ["token": stripeTokenId] // 写入到新节点的token子路径 newSourceNodeRef.child("token").setValue(tokenData) { error, ref in if let error = error { print("写入支付令牌失败:\(error.localizedDescription)") } else { print("支付令牌已成功写入,等待Cloud Functions处理") } }
这样操作后,你的Cloud Functions里的exports.addPaymentSource就能正常捕获到iOS端的写入事件,完成后续的Stripe支付来源更新逻辑,和Web端的流程完全对齐。
内容的提问来源于stack exchange,提问作者mKane
相关产品推荐
相关产品推荐

