Giter Site home page Giter Site logo

inapp-sdk's Issues

Payment issues

When I pay the success And Click to return,Onestore prompts me to cancel payment. I choose yes but still charge. How can I do with this problem?
Environmental : Android
lib: iap_plugin_v16.03.00_20161123
code: 9100

인앱 수정 내용 반영

  • Application, App, 앱 등으로 쓰던 표현을 App 으로 통일 했습니다.
  • 스샷 이미지를 수정했습니다.
  • 설명 일부를 수정했습니다.

플러그인 SDK에서 유니티로 메시지를 전달 문의

결제 취소 시에 플러그인 SDK에서 유니티로 메시지를 전달하는 부분이 없는데, 저희가 서비스 하는 게임 구조상 그게 필요합니다. 혹 관련해서 참고 할 수 있는 내용이 있으면 알려주시면 좋겠습니다.

상품구매 시 InApp API 페이지 관련

Application 실행 > 상점 > InApp API 페이지 진입 > 단말 홈 키 > Application 앱아이콘 터치 실행

위 상황시 InApp API 페이지가 사라져 재구매 시도시 -1004 ResultCode가 반환됩니다.

Application 실행 > 상점 > InApp API 페이지 진입 > 단말 홈 키 > 메뉴버튼으로 Application 실행

위 상황에서는 InApp API페이지가 사라지지 않습니다.

확인부탁드립니다.

React-Natvie plugin

One store 인앱결제용 React Native 플로그인이 없어서 자체로 하나 만들었는데 어디에 올려야 할까요?

인앱 개발하기: 가이드

인앱결제 구현 절차

순서 구분 내용
1 개발 환경 Setting IAP API를 사용하기 위한 개발 환경 설정에 대해 숙지하여, 개발 환경을 구성한다.
2 개발자센터 상품등록 개발자센터에 접속하여 판매할 상품과 In-App 상품을 등록한다.
3 In-App Purchase 개발 Application Programming Guide를 참고하여 적용하고자 하는 Application에 In-App결제를 적용한다.
4 Self Test In-App 결제 구현이 완료되면 판매가능한 상품으로 등록하기 전에 ONE스토어 개발자센터가 제공하는 개발용 API 서버를 이용하여 자체 시험(Self Test)을 진행한다.
5 개발완료 & 검증 요청 Self Test가 완료되면 ONE스토어 개발자센터에 상품을 판매하기 위해 Application 검증 요청을 한다.

개발환경 세팅

SDK 다운로드

ONE스토어 개발자센터 In-App Purchase 기능 개발에 필요한 최신의 IAP 라이브러리와 Sample Code를 다운로드 받는다.

IAP 라이브러리는 서비스 정책의 변경, 기능의 추가 또는 버그 패치를 목적으로 비 정기적으로 업데이트될 수 있다. IAP 라이브러리가 업데이트되면 ONE스토어 개발자센터에 공지사항으로 안내 되고, ONE스토어 개발자센터에 등록한 개발자들에게 e-mail 을 통해 공지한다.

Application을 개발하는 시점에 ONE스토어 개발자센터에 등록되어 있는 최신의 라이브러리를 사용 하여 개발해야 한다. 그렇지 않으면, Application 내에서의 In-App Product 구매가 비정상적으로 동작할 수 있고, ONE스토어 개발자센터에 Application 등록이 불가할 수 있다.

인앱결제 라이브러리을 다운로드 한다. “인앱결제 라이브러리”는 다음의 내용을 포함한다.

Onestore_IAP_API
L release
    L libs
    L iap-plugin-[version].jar
L sample
L license.txt

[표] ONE스토어 개발자센터 IAP API 다운로드 디렉토리 구조

디렉토리 설명
release 개발/상용 IAP 서버와 연동하는 ONE스토어 개발자센터 In-App Purchase 라이브러리
sample ONE스토어 개발자센터 IAP API 적용 예제 소스

[표] ONE스토어 개발자센터 IAP API 다운로드 디렉토리 설명

IAP API 추가

eclipse 에서 작업하기

Android Studio 2 버전 이상에서 작업하기를 권장합니다.

  1. Project Explorer 에서 마우스 우 클릭하여 “New”를 선택한 후 “Folder”를 설정하여 새로운 폴더를 생성한다.
    • Folder” 이름은 “lib”으로 설정한 후 Jar 라이브러리(iap-plugin-[version].jar) 파일을 윈도우 탐색기에서 복사하여 해당 폴더에 붙인다.

      * ADT가 17 이상인 경우, “Folder” 이름은 “libs”으로 설정

  2. 기존에 생성한 armeabiarmeabi-v7a 폴더 및 so파일이 있다면 삭제한다.
  3. IAP API 설정
    • ADT revision 16 이하
    • Project Explorer에서 마우스 우 클릭을 하여 “Properties”를 선택하여 설정 창을 불러 온다.
    • 좌측 선택 트리에서 Java Build Path를 선택하고 “Add JAR”를 선택한다.
    • “JAR Selection” 창이 뜨면 앞 단계에서 복사한 Jar 라이브러리(개iap-plugin-[version].jar)파일을 선택하여 설정한다.
  4. ADT revision 17 이상
    ADT가 17 이상인 경우, libs내의 jar를 자동으로 빌드 패스에 추가된다.

<span id= id="androidmanifest"> AndroidManifest.xml 설정

IAP API를 사용하는 Application이 통합 개발자센터가 정의한 서비스 정책에 따라 동작하기 위해 AndroidManifest.xml 파일에 다음의 내용들이 반드시 설정되어야 한다. 아래의 내용이 설정되지 않으면, 정상적인 동작이 어려울 뿐만 아니라 Application의 상품 등록이 실패할 수 있다. 아래의 내용들은 통합 개발자센터의 In-App Purchase 정책에 따라 추가, 삭제 또는 변경될 수 있다.

Permission 설정

다음은 In-App Purchase 라이브러리에서 필요로 하는 권한을 나열한 것이다. 정상적인 In-App Purchase 서비스를 이용하기 위해서는 나열된 권한을 모두 설정해야한다.

Permission AndroidManifest.xml
SMS Receipt <uses-permission android:name="android.permission.RECEIVE_SMS" />
Internet <uses-permission android:name="android.permission.INTERNET" />
Network State Access <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Phone State <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Wifi State Access <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

RunTime permission 설정 안내 (Android 6.0 이상)

Android 6.0 (marshmallow) 부터 permission 정책 변경되었습니다. 몇 가지 중요한 permission들은 이전 버전과 다르게 앱 설치시에 권한을 획득하지 않고 앱을 실행하여 필요할 때 혹은 [Setting > application 설정] 에서 사용자가 언제나 권한을 바꿀 수 있도록 변경되었습니다.

[[image:runtimePermission01.png||style="MARGIN-LEFT: auto; DISPLAY: block; MARGIN-RIGHT: auto" height="400"]]

[그림] Runtime perssion 안내

이에 따라 인앱결제 라이브러리를 적용하는 앱은 반드시 인앱결제 서비스에 필요한 권한들을 요청하고 획득하는 로직을 구현해야 합니다. 안전한 서비스를 위하여 결제시 필요한 권한을 처리하는 부분을 따로 구현하는 것을 부탁드립니다. 이를 구현하지 않을 경우 인앱결제 서비스 이용이 불가능 할 수 있으니 참고 바랍니다.

권한 구현 필요 비고
android.permission.INTERNET X 앱 설치시 권한 획득
android.permission.ACCESS_NETWORK_STATE X 앱 설치시 권한 획득
android.permission.ACCESS_WIFI_STATE X 앱 설치시 권한 획득
android.permission.READ_PHONE_STATE O 권한 체크 및 확인 필요
android.permission.RECEIVE_SMS O 권한 체크 및 확인 필요

[표] Runtime permission 설정 안내

meta-data 설정

In-App Purchase 라이브러리를 사용하는 Application은 반드시 나열된 meta-data를 모두 설정 해야 한다.

인앱결제 라이브러리 14.01.00 이후 버전부터 해당 라이브러리에 알맞은 API Version을 명시해야 하고, 라이브러리만 교체하고 API Version을 수정하지 않은 경우 인앱결제 라이브러리가 정상 동작하지 않을 수 있다.

상세 내용은 레퍼런스를 확인한다.

<application ...... >
   <meta-data
      android:name="iap:api_version" 
      android:value="3" />

In-App Purchase 모바일 웹 구매 화면(Activity) 선언

모바일 웹 구매 Activity 는 로케일, 화면 전환 설정(configuration) 변환을 감지해야 하므로 AndroidManifest.xml에 설정하는 아래 나열된 configuration 항목을 설정해야 한다.

안드로이드 API level 17 이상의 단말 지원을 위하여 어플리케이션의 Build-target을 API level 17 이상으로 설정하고 아래와 같은 layoutDirection 항목을 추가하여야 한다.

android:configChanges="orientation|keyboardHidden|locale|layoutDirection

  • targetSdkVersion - Android API Level 12 이하
<activity
android:name="com.skplanet.dodo.IapWeb"
android:configChanges="orientation|keyboardHidden|locale|LayoutDirection"
android:excludeFromRecents="true"
android:windowSoftInputMode="stateHidden" />
  • targetSdkVersion - Android API Level 13 이상
<activity
android:name="com.skplanet.dodo.IapWeb"
android:configChanges="orientation|screenSize|keyboardHidden|locale|LayoutDirection"
android:excludeFromRecents="true"
android:windowSoftInputMode="stateHidden" />

보다 상세한 내용은 샘플코드를 참고하시기 바랍니다.

인앱 상품 등록

In-App Purchase 를 사용하기 위해서는 상품의 AID와 인앱상품ID가 반드시 필요하며, 따라서 사전에 개발자센터에 판매할 상품과 In-App 상품을 등록해야 한다.

상품ID만 발급하면 되므로 APK파일을 업로드 할 필요는 없다.

상품등록

인앱 상품 한번에 등록하기

구글 플레이 개발자 콘솔, 네이버 앱스토어 개발자센터 등에서 다운로드 받은 인앱상품 목록(CSV)를 간단한 편집 후 한번에 등록할 수 있습니다.

인앱 상품 개별 등록하기

  • ONE스토어 개발자센터에 로그인 한 후 Apps 메뉴에 들어가서 상품등록 버튼을 누른 후 상품을 등록한다.

인앱 상품 종류는 레퍼런스 > 인앱상품종류를 참고하시기 바랍니다.

AID확인

  • 상품현황페이지에서 등록한 Application을 선택하면 해당 AID를 확인할 수 있다.

인앱 상품 등록

  • In-App상품 정보에서 를 통합 개발자센터에 등록한다.
    • 등록한 어플리케이션을 선택하고, In-App 정보 메뉴를 선택한다.
    • 만약 정산정보가 등록되어있지 않은 경우 정산정보를 등록하여야 한다.

인앱상품 등록

  • 상품등록을 클릭하여 어플리케이션에서 판매할 상품 정보를 등록한다.
    • 상품제목은 판매할 상품의 제목을 입력하고, 해당 상품의 종류를 선택하여 입력한다.
    • 인앱 상품경로는 추후 통합 개발자센터 검증시 이용되는 정보이므로 해당 상품이 위치한 경로를 입력한다.
    • 상품가격은 부가세 포함 금액을 입력한다.
    • 모든 입력이 완료되었으면 저장 버튼을 클릭한다.

등록된 인앱 상품 확인

  • 등록된 인앱 상품을 확인한다.
    • 등록된 In-App product를 확인하여 Application ID와 Product ID를 확인한다.
    • Application ID와 Product ID는 결제 요청시 반드시 필요한 정보이다.

인앱 개발하기

ONE스토어 인앱 SDK는 4개의 Java 클래스(또는 인터페이스)들을 제공하며 API의 요청 결과를 이벤트 리스너를 통해서 전달받는 비동기 방식을 사용하고 있다. 호출한 IAP API의 요청 결과를 받기 위한 이벤트 리스너를 구현, 설정해야한다. IAP Plugin 객체를 얻은 후, In-App 상품 구매 요청을 호출한다. 전달되는 결과에 따라 적합한 처리는 개발자가 Application 내부에 정의하여 구현해야 한다.

컴포넌트 설명 API 버전
IapPlugin IAP 서버와의 상호작용을 위한 기본 IAP Plugin 클래스 1
RequestCallback 요청 결과를 받기 위한 콜백 인터페이스 1
IapResponse 응답 데이터 인터페이스 1
IapWeb 구매를 위한 WebView 생성과 구매 처리를 위한 로직이 구현된 클래스 1

[표] com.skplanet.dodo 패키지

IAP Plugin Instance 얻기

Application 내에서 IAP API를 사용하기 위해 IAP Plugin Instance를 얻는다. 상용서버와 개발 서버용 Instance중 원하는 서버를 선택하여 얻어올 수 있다.

IapPlugin Class Methods

Application이 IAP API를 사용하기 위해서는 IAP Plugin Instance를 획득해야 하며 Plugin Instance 사용이 끝난 후에는 반드시 IAP 라이브러리 내의 리소스 해제 등을 위해 종료 메소드를 호출해야 한다.

getPlugin (레퍼런스)

public static final IapPlugin getPlugin(Context context, String pluginmode)

IAP Plugin 객체를 얻는다. 이 메소드를 호출하면 새로운 IapPlugin 객체를 생성하여 반환한다. 호출시 필수 파라미터로 pluginmode 문자열을 넘겨줘야 한다. 넘겨주지 않을 경우 강제로 상용 서버(release) 모드로 셋팅된다. (리턴: IapPlugin Instance)

한 번 생성된 IAP Plugin 객체는 변경이 불가능하다. 다시 말해 상용/개발 서버 재설정이 필요한 경우 서버설정용 문자열을 변경하여 어플리케이션을 다시 빌드해야 한다.

구매 요청하기: sendPaymentRequest (레퍼런스)

In-App Product의 구매를 IAP Server에 요청하는 메소드이다. 이 메소드를 통한 요청이 성공하면 웹뷰 페이지가 열리며 페이지 내에서 구매 절차를 수행할 수 있다. 요청 메시지 형식은 HTTP Post 파라미터 구성을 따르며 응답 메시지는 JSON 포맷을 따른다. 요청/응답 메시지 구성은 다음 절에서 상세하게 설명한다.

public Bundle sendPaymentRequest(String param, RequestCallback cb)
  • 설명
    구분 내용 비고
    param In-App Product 구매를 위한 HTTP Post 파라미터 포맷 문자열 레퍼런스
    cb 요청 처리 결과를 전달받기 위한 RequestCallback 인스턴스 레퍼런스

상품조회, 상태변경: sendCommandRequest (레퍼런스)

Application내에서 구매한 상품 목록 조회, 상세 조회, 상태 변경 등의 명령을 IAP Server에 요청하는 메소드이다.

public native Bundle sendCommandRequest(String json, RequestCallback cb)
  • 설명
    구분 내용
    json In-App Product 구매를 위한 HTTP Post 파라미터 포맷 문자열
    cb 요청 처리 결과를 전달받기 위한 RequestCallback 인스턴스

IAP Plugin 종료하기

IAP Plugin Instance 사용이 끝난 후, 반드시 종료 절차를 수행해야 한다.

exit

public void exit()

IapPlugin.getPlugin으로 얻은 IAP Plugin 객체 사용이 끝난 후 종료 함수를 호출해야 한다.

Missing Mono Script

When I open the project, I found the script is missing on the gameobject "lapSample". Could you please fix it?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.