首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Firebase云功能和Firestore在android上验证购买

使用Firebase云功能和Firestore在android上验证购买
EN

Stack Overflow用户
提问于 2018-09-07 09:30:52
回答 1查看 1.6K关注 0票数 1

我一直在开发一个功能来验证在android设备上的购买情况。从这里到那里,我得到了使用Firebase实时数据库的代码,我没有尝试使用该代码:

代码语言:javascript
运行
复制
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防火墙,以及如何从android设备中调用它?

EN

回答 1

Stack Overflow用户

发布于 2018-09-07 10:02:25

有几种可能的办法:

1/从您的应用程序中调用一个云函数,该函数与Firestore交互

正如在文档中所解释的,您可以从应用程序中调用云函数:

Firebase客户端SDK的云函数允许您直接从Firebase应用程序调用函数。要以这种方式从应用程序调用函数,在Cloud函数中编写和部署HTTPS可调用函数,然后添加客户端逻辑从应用程序调用函数。

在这个HTTPS可调用函数中,您可以以您希望的方式与Firestore数据库交互(读/写/修改/删除),并将一些数据返回给应用程序。

用于修复和云函数的文档展示了如何在云函数中编写和读取Firestore。还有一个正式的示例演示了如何从HTTPS函数这里 (不完全是HTTPS可调用函数,但非常类似)与Firestore进行交互。

您将按如下方式调用HTTPS可调用函数(上面引用的文档的摘录):

代码语言:javascript
运行
复制
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函数的文档中所解释的那样:

您可以部署Node.js代码来处理由云修复数据库中的更改触发的事件。 Firestore支持创建、更新、删除和写入事件。

然后,您将使用Android应用程序中的侦听器来检测Firestore中的变化,正如这里所解释的那样。

在您的情况下,基于您在问题中包含的代码,您将在订单文档中写入一个值,该值将触发对authClient.authorize()的调用(类似于您问题中的实时数据库代码),并且在成功的情况下,更新/创建您正在应用程序中侦听的另一个文档。

因此,使用这种方法,您不会直接调用该函数

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52219575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档