- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我开始创建一个可以从中购买元素的应用程序。可能是这样的:您可以在其中看到 Image
、Name of product
和 Price
。好吧,我已经有了一个使用 Authentication Firebase
制作的 Sign-in with Google
并将其存储在 Firebase 数据库
中,我想创建以下是@Alex Mamo 向我推荐的结构:
Firebase-root
|
--- users
| |
| --- uid1
| |
| --- //user details (name, age, address, email and so on)
| |
| --- products
| |
| --- productId1 : true
| |
| --- productId2 : true
|
--- products
| |
| --- productId1
| | |
| | --- productName: "Apples"
| | |
| | --- price: 11
| |
| |
| --- users
| |
| --- uid1: true
| |
| --- uid2: true
|
--- purchasedProducts
| |
| --- uid1
| |
| --- productId1: true
| |
| --- productId2: true
|
--- paidProducts
| |
| --- uid2
| |
| --- productId3: true
|
--- availableProducts
| |
| --- uid3
| |
| --- productId4: true
制作像我这样简单的应用程序看起来不错。因为场景很简单:
从一开始,我就将 uid
存储在 users
中。我不知道的是;
Google Play 控制台
上创建与 Firebase 数据库
相同的产品?我已经创建了 1 个产品来在 Google Play 控制台
上进行测试,我还必须在我的应用程序上创建产品吗(我是说在 Firebase 数据库
上)?<为了实现应用内计费
,我正在关注这个 tutorial但我找到了这个android-inapp-billing-v3库,但看起来不错。
如果你们中有人使用过应用内购买
并创建了项目并且知道如何从 Google Play Console
获取它们,请随时分享如何操作的演示。
我已经知道如何购买我最终使用这个 Library 的元素了,问题是在我的 Login
页面上我有 firebase 的 db create 我的意思是我在那里放置了用户 ID 和电子邮件......我是否也必须在那里添加所有产品?
最佳答案
我将对您计划的数据库结构进行一些更改,希望能稍微简化一下。
我们将有两种类型的保存数据:
第一种类型
是一个节点数据,您将添加它并手动准备它,我们将其称为“产品”。在此产品节点中,您将添加从 Google Play 控制台获得的产品 ID,然后为其提供一些类似的详细信息:
Products
|
|--------Wood_id
| |
| |--name : "wood"
| --price: "10"
| -- ........
|
|---------Iron_id
|
|--name : "iron"
--price: "20"
-- ........
好的,现在让我们定义上图:
Wood_id 或 Iron_id:代表您在 Google Play 控制台中创建产品时使用的确切 ID。 (((您在数据库中手动输入它及其详细信息))
名称:代表要在回收站 View 中显示的项目的名称((也可以手动输入所有这些详细信息))。
价格:积分或您决定的任何东西。
所以这些是您在 Firebase 控制台的数据库树中手动输入的内容。
在回收站 View 中填充时,它看起来像那样
|---------------|
| wood |
------------------
| iron |
| |
-----------------
您可以使用 Firebase UI 实现此目的((这将使您更容易检索节点并在 RecyclerView 中查看它们))。
好的,到现在为止,我们能够向用户展示产品并在产品列表中查看它们((每个项目都带有它和 Id 等于 google play 控制台上的 id))
第二种
是我们将从应用程序添加的数据类型,即(用户)节点和(已购买商品)节点。
users节点是这样的
Users
|
|--------user1
| |
| |--name : "..."
| --e-mail: "..."
| -- ........
|
|---------user2
|
|--name : "..."
--e-mail: "..."
-- ........
好的,这是一个由您来添加的节点,通常在创建用户((注册))之后出现,但您似乎已经使用谷歌登录完成了这一点。
所以这个节点不是很重要,但是你可以根据需要添加。
现在看看我们将要做什么。我们将让用户点击一个项目,然后我们将检查该项目是否存在于他的列表中,如果不存在,我们将向他显示付款意向。在他/她购买了元素后,我们将把它添加到(已购买的元素)节点中,如下所示:
Purchased items
|
|--------user1
| |
| |--Wood_id : "any_value"
| --Iron_id: "any_value"
|
|
|---------user2
|
|--Iron_id : "any_value"
上面的树表示用户 1 购买了(木头和铁),而用户 2 只购买了(铁)。
例如,当用户 2 单击木材时,我们将获取与木材关联的产品 ID,即 (Wood_id),我们将使用 firebase 运行一个值事件监听器,我们将检查用户 2 是否具有 (Wood_id),在我们的案例 user2 没有木头。所以如果你想要你提到的计费库并通过(Wood_id)从谷歌播放控制台购买,你可以在这里使用,并且在你提到的这个库的听众中检查付款是否成功(在这里你为 user2 添加“Purchased items”节点中的 Wood_id,以便用户 2 下次单击时 firebase 将运行一个监听器并且不会再次显示付款)。
这就是您使用您想要使用的库的方式。
更新
如何在回收站 View 中检索数据库(产品)。
首先添加最新的firebase数据库和firebase ui
compile 'com.google.firebase: firebase-database: 11.4.2'
compile 'com.firebaseui: firebase-ui-database: 3.1.0'
之后,您需要创建一个 java 类,在其中调用它 (ProductsClass) 添加这些:
public class ProductsClass{
//these should be the same name as keys in your database
public String name;
public String product_id;
public String state;
//empty constructor
public ProductsClass(){
}
public ProductsClass(String name, String product_id, String state){
this.name=name;
this.product_id=product_id;
this.state=state;
}
public String getName(){
return name;
}
public void setName(){
this.name=name;
}
public String getProduct_id(){
return product_id;
}
public void setProduct_id(){
this.product_id=product_id;
}
public String getState(){
return state;
}
public void setState(){
this.sate=state;
}
}
现在在您的(产品 Activity )中
private Recyclerview products_recycler;
private FirebaseAuth mauth;
private DatabaseReference products_ref;
private String currentuser;
//in on create
products_recycler=find it by id......
mauth=FirebaseAuth.getInstance();
currentuser=mauth.getCurrentUser().getUid();
products_ref=FirebaseDatabase.getInstance().getReference().child("products");
//manger
products_recycler.setHasFixedSize(true);
products_recycler.setLayoutManager(new LinearLayoutManager(this));
//in onstart
FirebaseRecyclerOptions< ProductsClass > options =
new FirebaseRecyclerOptions.Builder< ProductsClass >()
.setQuery(products_ref, ProductsClass.class)
.build();
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter< ProductsClass, ProductsHolder>(options) {
@Override
public ProductsHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//inflate the single recycler view layout(item)
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.productslayout, parent, false);
return new ProductsHolder(view);
}
@Override
protected void onBindViewHolder(ProductsHolder holder, int position, ProductsClass model) {
//here you set stuff in items , get data, ....
//model is your class model (you get data from it)
}
};
// now set adapter
adapter.startListening();
products_recycler.setAdapter(adapter);
//make a static class called ProductsHolder in the same activity
public static class ProductsHolder extends RecyclerView.ViewHolder{
View view;
public ProductsHolder(View itemView){
view= itemView;
}
//what ever methods you need to add
}
注意:R.layout.productslayout 是回收站 View 中每个项目的自定义布局。
通过这种方式,您可以在任何 Activity 中检索您想要的任何节点。
引用链接:this link
关于android - In-App billing 连接到 Firebase 并获取 Products,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47438092/
我是一名优秀的程序员,十分优秀!