我一直在研究一种功能,以验证在android设备上的购买。 从这里到那里,我得到了使用Firebase实时数据库的代码,我没有尝试使用它:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const {google} = require("googleapis");
const publisher = google.androidpublisher('v2');
const authClient = new google.auth.JWT({
email: 'Service Account Email',
key: '-----BEGIN PRIVATE KEY-----\n**********************************************************************************==\n-----END PRIVATE KEY-----\n',
scopes: ['https://www.googleapis.com/auth/androidpublisher']
});
admin.initializeApp();
exports.validatePurchases = functions.database
.ref('/purchases/{uId}/{orderId}')
.onCreate((event, context) => {
const purchase = event.val();
if (purchase.is_processed === true) {
console.log('Purchase already processed!, exiting');
return null;
}
const orderId = context.params.orderId;
const dbRoot = event.ref.root;
const package_name = purchase.package_name;
const sku = purchase.sku;
const my_token = purchase.token;
authClient.authorize((err, result) => {
if (err) {
console.log(err);
}
publisher.purchases.products.get({
auth: authClient,
packageName: package_name,
productId: sku,
token: my_token
}, (err, response) => {
if (err) {
console.log(err);
}
// Result Status must be equals to 200 so that the purchase is valid
if (response.status === 200) {
return event.ref.child('is_validated').set(true);
} else {
return event.ref.child('is_validated').set(false);
}
});
});
return null;
});
如何结合功能将其转换为Firebase firestore,以及如何从android设备调用它?
答案 0 :(得分:2)
有几种可能的方法:
1 /在您的应用中,调用与Firestore交互的Cloud Function
如doc中所述,您可以从应用程序中调用Cloud Function:
Firebase客户端SDK的Cloud Functions让您调用函数 直接从Firebase应用程序。在此从您的应用程序调用函数 在Cloud Functions中编写和部署HTTPS Callable函数的方式, 然后添加客户端逻辑以从您的应用中调用该函数。
在此HTTPS可调用函数中,您可以按所需的方式(读取/写入/修改/删除)与Firestore数据库进行交互,并将一些数据返回到您的应用。
Firestore和Cloud Functions的doc显示了如何在Cloud Function中向Firestore读写数据。还有一个官方示例演示了如何通过HTTP Cloud Function here(与HTTPS Callable函数完全不同,但非常相似)与Firestore进行交互。
您将按以下方式调用HTTPS可调用函数(上面引用的doc的摘录):
addMessage(inputMessage)
.addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
if (!task.isSuccessful()) {
Exception e = task.getException();
if (e instanceof FirebaseFunctionsException) {
FirebaseFunctionsException ffe = (FirebaseFunctionsException) e;
FirebaseFunctionsException.Code code = ffe.getCode();
Object details = ffe.getDetails();
}
// ...
}
// ...
}
});
2 /基于Firestore中的某些事件触发Cloud Function,并监听此Cloud Function执行的更改
如doc中有关Firestore和云功能的说明:
您可以部署Node.js代码以处理由 您的Cloud Firestore数据库 ....
Firestore支持创建,更新, 删除和写入事件。
然后,您将在Android应用中使用侦听器来检测Firestore中的更改,如here所述。
在您的情况下,根据问题中包含的代码,您将在订单文档中写入一个值,这将触发对authClient.authorize()
的调用(类似于问题中的实时数据库代码),并且,成功后,更新/创建您正在应用程序中收听的另一个文档。
因此,通过这种方法,您不会直接调用函数