Firebase Firestore + Cloud Function 服务器端验证应用内购买收据(Swift + NodeJS)

swift服务器JS

1个回答

写回答

鱼呀i

2025-07-08 17:25

+ 关注

Swift
Swift

使用 Firebase Firestore 和 Cloud Functions 可以简化应用内购买收据的验证过程,确保用户的支付信息安全可靠。本文将介绍如何使用 Swift 和 Node.JS 来实现这一功能。

1. 设置 Firestore 数据库

首先,我们需要在 Firebase 控制台中创建一个 Firestore 数据库。打开控制台,点击“创建数据库”按钮,选择适合你项目的模式(测试模式或生产模式)。完成设置后,你将获得一个项目 ID,我们稍后会用到它。

2. 配置 Firebase SDK

在 Xcode 中,打开你的 Swift 项目,使用 CocoaPods 或 Swift Package Manager 导入 Firebase SDK。确保已经安装了 Firebase/Firestore 和 Firebase/Functions 组件。

在 AppDelegate.Swift 文件中,导入 Firebase 和 FirebaseCore 模块,然后在 didFinishLaunchingWithOptions 方法中添加以下代码来初始化 Firebase:

Swift

import Firebase

import FirebaseCore

FirebaseApp.configure()

3. 编写 Swift 代码

我们将使用 Swift 来处理应用内购买收据并将其发送到 Cloud Functions 进行验证。在你的 Swift 项目中,创建一个新的 Swift 文件,命名为 "InAppPurchaseManager.Swift"。

首先,导入 Firebase 模块和 StoreKit 模块:

Swift

import Firebase

import StoreKit

接下来,我们创建一个 InAppPurchaseManager 类,用于处理应用内购买流程。在该类中,我们需要实现 SKPaymentTransactionObserver 协议和 SKProductsRequestDelegate 协议。在类的开头添加以下代码:

Swift

class InAppPurchaseManager: NSObject, SKPaymentTransactionObserver, SKProductsRequestDelegate {

static let shared = InAppPurchaseManager()

private var productRequest: SKProductsRequest?

private override init() {

super.init()

SKPaymentQueue.default().add(self)

}

// 实现协议方法...

}

现在,我们需要实现 SKPaymentTransactionObserver 协议的两个方法,用于处理购买流程的不同状态。在 InAppPurchaseManager 类中添加以下代码:

Swift

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {

for transaction in transactions {

switch transaction.transactionState {

case .purchased:

// 处理购买成功的逻辑

verifyPurchase(with: transaction)

case .fAIled:

// 处理购买失败的逻辑

case .restored:

// 处理恢复购买的逻辑

case .deferred:

// 处理购买延迟的逻辑

case .purchasing:

// 处理购买中的逻辑

@unknown default:

break

}

}

}

func verifyPurchase(with transaction: SKPaymentTransaction) {

// 发送购买收据到 Cloud Functions 进行验证

guard let receiptURL = Bundle.mAIn.appStoreReceiptURL,

let receiptData = try? Data(contentsOf: receiptURL).base64EncodedString() else {

return

}

let request = [

"receiptData": receiptData,

"productId": transaction.payment.productIdentifier

]

// 使用 Firestore 提交验证请求

let db = Firestore.firestore()

let docRef = db.collection("purchaseVerifications").document()

docRef.setData(request) { error in

if let error = error {

print("Error verifying purchase: \(error.localizedDescription)")

} else {

print("Purchase verification successful!")

}

}

}

4. 创建 Cloud Function

下面是我们将用于验证应用内购买收据的 Node.JS Cloud Function 代码。我们将使用 express 框架来创建一个简单的 HTTP 服务器,以便接收来自 Swift 代码发送的验证请求。

首先,创建一个新的 Node.JS 项目并初始化它。然后,使用 npm 安装必要的依赖项:

npm install express cors firebase-admin

在项目根目录下创建一个新的 JavaScript 文件,命名为 "index.JS"。在该文件中添加以下代码:

Javascript

const functions = require('firebase-functions');

const express = require('express');

const cors = require('cors');

const admin = require('firebase-admin');

admin.initializeApp();

const app = express();

app.use(cors({ origin: true }));

app.post('/', async (req, res) => {

try {

const { receiptData, productId } = req.body;

// 在此处添加验证逻辑

res.status(200).send({ message: 'Purchase verification successful!' });

} catch (error) {

console.error('Error verifying purchase:', error);

res.status(500).send({ error: 'Purchase verification fAIled.' });

}

});

exports.verifyPurchase = functions.https.onRequest(app);

5. 部署 Cloud Function

使用 Firebase CLI 将 Cloud Function 部署到 Firebase 云端。在终端中导航到你的项目根目录,并运行以下命令:

firebase deploy --only functions

等待部署完成后,你将获得一个 Cloud Function 的 URL,我们稍后会用到它。

6. 更新 Swift 代码

回到你的 Swift 项目中,在 "InAppPurchaseManager.Swift" 文件的 verifyPurchase 方法中,将以下代码添加到 Firestore 请求的 setData 方法之前:

Swift

let url = URL(string: "YOUR_CLOUD_FUNCTION_URL")!

var request = URLRequest(url: url)

request.httpMethod = "POST"

request.setValue("application/JSon", forHTTPHeaderField: "Content-Type")

let requestData = try? JSONSerialization.data(withJSONObject: request, options: [])

request.httpBody = requestData

let task = URLSession.shared.dataTask(with: request) { data, response, error in

if let error = error {

print("Error verifying purchase: \(error.localizedDescription)")

} else if let data = data {

let responseString = String(data: data, encoding: .utf8)

print("Purchase verification response: \(responseString ?? "")")

}

}

task.resume()

将 "YOUR_CLOUD_FUNCTION_URL" 替换为你在步骤 5 中部署的 Cloud Function 的 URL。

7. 测试应用内购买验证

现在,你可以在你的应用中测试应用内购买验证功能了。当用户进行购买操作时,我们的 Swift 代码会将购买收据发送到 Cloud Functions 进行验证。Cloud Functions 将根据你的验证逻辑执行相应的操作,并返回验证结果给 Swift 代码。

通过使用 Firebase Firestore 和 Cloud Functions,我们可以轻松地实现应用内购买收据的验证功能。通过将 Swift 代码和 Node.JS 代码结合我们可以在客户端服务器端之间实现安全可靠的数据传输。这种方法不仅简化了验证过程,还提供了可扩展性和灵活性,使我们能够轻松地处理购买验证的各种情况。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号