Биллинг в приложении подключается к Firebase и получает продукты

Я начинаю создавать APP, где я могу покупать предметы из него. Может быть так: image] где вы можете увидеть Image, Name of product и Price. Ну, у меня уже есть Sign-in with Google, сделанный с Authentication Firebase, и я храню его на Firebase database, я бы хотел создать следующую структуру, которую @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

Выглядит хорошо, чтобы сделать легкое приложение вроде моего. Поскольку сценарий так же прост, как:

  • Пользовательские логги в APP
  • Пользователь видит бесплатные продукты и может покупать некоторые продукты.
  • Пользователь может видеть, что продукты, которые уже заплатили за них

С самого начала я сохраняю uid внутри users. Что я не знаю,

  • Нужно ли создавать те же продукты на Google Play Console до Firebase database? Я уже создал 1 продукт для тестирования на Google Play Console, мне тоже нужно создать продукт в моем приложении (я имею в виду Firebase database)?

Чтобы реализовать in-app billing, я следую этому учебнику, но я нашел это android-inapp-billing-v3 и выглядит неплохо.

Если есть кто-либо из вас, который работал с in-app-purchased, и создал элементы и знает, как их получить из Google Play Console, не стесняйтесь делиться демонстрацией того, как это сделать.

ИЗМЕНИТЬ

Я уже получил, как покупать предметы, которые я закончил, используя эту Library, дело в том, что на моей странице Login у меня есть db create firebase Я имею в виду, что я помещаю идентификатор пользователя и адрес электронной почты... Нужно ли добавлять все продукты там?

Ответ 1

Я немного поменяю то, что у вас есть, в плане структуры базы данных, надеюсь, немного упростится.

У нас будет 2 типа сохраненных данных:

Первый тип

Это node данные, которые вы добавите, и подготовьте их вручную, и мы будем называть его "Продукты". В этих продуктах node вы добавите идентификаторы продуктов, которые вы получили из игровой консоли google, а затем дайте им некоторые подробности:

    Products
    |
    |--------Wood_id
    |         | 
    |         |--name : "wood"
    |          --price: "10"
    |          -- ........ 
    |
    |---------Iron_id
              | 
              |--name : "iron"
               --price: "20"
               -- ........

okay теперь позволяет определить приведенную выше диаграмму:

Wood_id или Iron_id: означает точный идентификатор, с которого вы создали свои продукты, в консоли Google Play. ((вы вводите его вручную в базе данных вместе со своими подробностями))

name: обозначает имя элемента, отображаемого в представлении recycler ((также вы вводите все эти данные вручную)).

цена: очки или все, что вы решите.

Итак, это материал, который вы вводите вручную в дереве базы данных в консоли firebase.

при заполнении в ресайклере это будет выглядеть как

        |---------------|
        |     wood      |
        ------------------
        |     iron      |
        |               |
        -----------------

Вы можете добиться этого с помощью Firebase UI ((что позволит вам легко получить узлы и просмотреть их в RecyclerView)).

до сих пор мы можем показывать пользовательские продукты и просматривать их в списке продуктов ((и каждый элемент несет с собой и идентификатор, равный id на консоли воспроизведения Google))

Второй тип

Является типом данных, которые мы добавим из приложения, которое (пользователи) node и (купленные предметы) node.

пользователи node похожи на

     Users
     |
     |--------user1
     |         | 
     |         |--name : "..."
     |          --e-mail: "..."
     |          -- ........ 
     |
     |---------user2
               | 
               |--name : "..."
                --e-mail: "..."
                -- ........

В порядке, это node, который вам нужно добавить и обычно приходит после создания пользователя ((вещь регистрации)), но вы, похоже, достигли этого, используя вход в Google.

Итак, этот node не очень важен, но вы можете добавить его, если хотите.

А теперь посмотри, что мы будем делать. Мы позволим пользователю нажать на элемент, а затем мы проверим, существует ли этот элемент в его списке, если мы не покажем ему намерение платежа. После покупки товара мы добавим его в (Приобретенные предметы) node следующим образом:

             Purchased items
             |
             |--------user1
             |         | 
             |         |--Wood_id : "any_value"
             |          --Iron_id:  "any_value"
             |         
             |
             |---------user2
                       | 
                       |--Iron_id : "any_value"

Указанное дерево указывает, что пользователь1 приобрел (дерево и железо), в то время как пользователь 2 покупал только (железо).

когда пользователь2, например, нажимает на дерево, мы будем захватывать идентификатор продукта, связанный с деревом, который является (Wood_id), и мы будем запускать прослушиватель событий значения с использованием firebase, и мы проверим, имеет ли user2 (Wood_id) или нет, в наш случай user2 не имеет древесины. Таким образом, здесь вы можете использовать, если хотите, чтобы вы указали библиотеку биллинга и передали (Wood_id) для покупки с игровой консоли google, а в слушателях этой библиотеки вы упомянули, что вы проверяете успешность платежей (и здесь вы добавляете для user2 Wood_id в разделе "Приобретенные предметы" node, так что в следующий раз, когда user2 щелкает firebase, будет запускаться слушатель и не будет показывать платеж снова).

Вот как вы это сделаете, используя библиотеку, которую вы хотите использовать.

UPDATE

Как получить в recycler представление базы данных (Продукты).

сначала добавьте последнюю базу данных firebase и firebase ui

   compile 'com.google.firebase: firebase-database: 11.4.2'
   compile 'com.firebaseui: firebase-ui-database: 3.1.0'

после этого вам нужно создать класс java, который он вызывает (ProductClass) внутри него:

    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;

         }



    } 

теперь внутри вашей (активность продуктов)

         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 - это настраиваемый макет для каждого элемента в представлении recycler.

таким образом вы получаете в любой активности любой node, который вы хотите.

ссылка ссылки: эта ссылка

Ответ 2

In-app Billing API отслеживает покупки, но управление инвентаризацией пользователей - это работа разработчика. Вы можете получить то, что было куплено с помощью getPurchases, поэтому вам не нужно сохранять их в базе данных, но это не относится к бесплатным продуктам, потому что вы не можете добавить их в список биллинга в приложении, так что вам нужно чтобы сохранить их в Firebase..Наконец об адаптере, если то, что вы запрашиваете, просто, используйте FirebaseRecycleradapter else use Recycleradapter.

Ответ 3

Я думаю, вы должны иметь в базе данных Firebase полный список ваших продуктов (как бесплатных, так и платных). Для платных вы также должны сохранить в поддереве продукта product_id, предоставленный Google Play Console, чтобы вы могли легко его восстановить в своем приложении.

Если пользователь получает бесплатный продукт: вам просто нужно обновить поддерево пользователя в базе данных Firebase, добавив productId в список пользовательских продуктов.

Если пользователь хочет получить платный продукт: вам нужно пройти весь процесс покупки биллинга в приложении.

Сначала вы получаете product_id из базы данных Firebase и запускаете процесс, используя его.

Как только покупка будет успешной, вы должны проверить срок действия покупки, используя токен, предоставленный API биллинга. Для этой операции вам необходимо использовать серверный сервер и вызвать Google Billing API с помощью токена покупки.

Сразу после этой операции вы можете безопасно добавить product_id в список продуктов, принадлежащих пользователю в базе данных Firebase, и показать диалоговое окно завершения в приложении.

Для реализации потока покупки я выполнил образец проекта, предоставленный Google, и получил рабочий процесс проверки. LINK