updated_at: 2024-12-15 04:07

결제 시스템 달기

https://devdactic.com/ionic-in-app-purchase-capacitor

npm i @ionic-native/core
npm i @ionic-native/in-app-purchase-2
npm i cordova-plugin-purchase@11  // 최신버젼은 13버젼이나 ionic-native/in-app-purchase-2 와 호환이 되지 않으므로 11을 선택한다.

module.ts

import { InAppPurchase2 } from '@ionic-native/in-app-purchase-2/ngx';

@NgModule({
  providers: [
    InAppPurchase2,
  ],
})

component.ts

import { Component, OnInit, ChangeDetectorRef } from '@angular/core';
import { Platform } from '@ionic/angular';
import { InAppPurchase2, IAPProduct } from '@ionic-native/in-app-purchase-2/ngx';

export class PointPage implements OnInit {
  products: IAPProduct[] = [];
  constructor(
    private store: InAppPurchase2,
    public plt: Platform,
    private ref: ChangeDetectorRef,
  ) {
    super(injector);
    this.getMyInfo();

    this.plt.ready().then(() => {
      this.store.verbosity = this.store.DEBUG;

      this.registerProducts();
      this.setupListeners();

      this.store.ready(() => {
        this.products = this.store.products;
        this.ref.detectChanges();
      });
    });
  }

  // 결제관련 시작
  registerProducts() {
    this.store.register({
      id: [상품아이디],
      type: this.store.CONSUMABLE,
    });
    ....................
    this.store.refresh();
  }

  setupListeners() {
  // General query to all products
  this.store.when('product')
    .approved((p: IAPProduct) => {
      this.ref.detectChanges();
      return p.verify();
    })
    .verified((p: IAPProduct) => p.finish());
  }

  /**
  * user restore click
  */
  restore() {
    this.store.refresh();
  }

  // 결제 버튼을 누를 경우
  public payment(product) {
    if (this.plt.is('capacitor')) {
      this.store.order(product).then(p => {
      // Purchase in progress!
      }, (e: any) => {
        console.log(e);
      });
    }
  }
}

capacitor.config.json 이부분은 더이상 필요없다고 하는데..?

{
  "plugins": {
    "cordova-plugin-purchase": {
      "BILLING_KEY":"MIIB......AB"
    }
  },
}

android

AndroidManifest.xml

<uses-permission android:name="com.android.vending.BILLING" />

Google Play Console에서 처리하기

  • 작업중인 app > Monetize > Products > In-app products 에서 상품등록
  • Google Play Console > Setup > License testing 에서 테스트할 이메일 입력

결제 관련 에러

  • 이미 보유하고 있는 아이템입니다.
이는 1회성 아이템(INAPP)을 만드는 중 발생하는데, 이 아이템이 소비되지 않았기 때문이다. 1회성 결제의 지속성을 부여하려면 결제 완료 후 소비로직을 적용해야한다.
  • 이 버전의 애플리케이션에서는 google play를 통한 결제를 사용할 수 없습니다.
여러가지 경우가 있을 수 있으나 본인의 경우는 Google Play Console > Setup > License testing 에서 테스트 정보를 입력함으로서 에러를 해결하였다.
평점을 남겨주세요
평점 : 5.0
총 투표수 : 1

질문 및 답글