[java/kotlin] 원스토어 인앱결제 연동
참고사항
- ㅁㄴㅇ
- ㅁㄴㅇ
java:
public class BillingOneStoreImpl implements PurchasesUpdatedListener {
private static String TAG = "BillingOneStoreImpl";
@NonNull
private final PurchaseClient mPurchaseClient;
private List<ProductDetail> skuDetailsList = new ArrayList<>();
public PubBillingOneStoreImpl(@NonNull final Activity activity) {
mPurchaseClient = PurchaseClient.newBuilder(activity)
.setBase64PublicKey(activity.getResources().getString(R.string.onestore_license_key))
.setListener(this)
.build();
}
public void init()
{
mPurchaseClient.startConnection(new PurchaseClientStateListener() {
@Override
public void onSetupFinished(IapResult iapResult) {
if(iapResult.isSuccess()){
queryProductDetailsAsync();
} else {
Log.d(TAG, iapResult.toJsonString());
}
}
@Override
public void onServiceDisconnected() {
}
});
}
private void queryProductDetailsAsync()
{
List<String> strList = new ArrayList<>();
strList.add("test_1000");
strList.add("test_2000");
ProductDetailsParams params = ProductDetailsParams.newBuilder()
.setProductIdList(strList)
.setProductType(PurchaseClient.ProductType.INAPP)
.build();
mPurchaseClient.queryProductDetailsAsync(params, new ProductDetailsListener() {
@Override
public void onProductDetailsResponse(IapResult iapResult,
@Nullable List<ProductDetail> list) {
//Log.d(TAG, iapResult.toJsonString());
if(iapResult.isSuccess() && list != null){
for(ProductDetail skuDetail : list){
Log.d(TAG, "ProductDetail = " + skuDetail.toString());
}
}else{
Log.d(TAG, iapResult.toJsonString());
}
}
});
}
public void purchase(@NonNull Activity activity,
@NonNull String pid,
@NonNull String devPayload)
{
ProductDetail sku = getSkuDetail(pid);
if( sku != null) {
PurchaseFlowParams params = PurchaseFlowParams.newBuilder()
.setProductId(pid)
.setProductType(PurchaseClient.ProductType.INAPP)
.setDeveloperPayload(devPayload)
.setPromotionApplicable(false)
.build();
mPurchaseClient.launchPurchaseFlow(activity, params);
}else{
Log.d(TAG, "sku is null");
}
}
@Override
public void onPurchasesUpdated(IapResult iapResult, @Nullable List<PurchaseData> list) {
if(iapResult.isSuccess() && list != null) {
for(PurchaseData purchase : list){
consumeAsync(purchase);
}
}else if(iapResult.getResponseCode() == PurchaseClient.ResponseCode.RESULT_USER_CANCELED){
Log.d(TAG, iapResult.toJsonString());
}else {
Log.d(TAG, iapResult.toJsonString());
}
}
private void consumeAsync(final PurchaseData purchase) {
ConsumeParams params = ConsumeParams.newBuilder()
.setPurchaseData(purchase)
.build();
mPurchaseClient.consumeAsync(params, new ConsumeListener() {
@Override
public void onConsumeResponse(IapResult iapResult, @Nullable PurchaseData purchaseData) {
if (iapResult.isSuccess() && purchaseData != null) {
if (purchaseData.getPurchaseToken().equals(purchase.getPurchaseToken())) {
Log.d(TAG, purchase.toString());
}else{
Log.d(TAG, "purchaseToken not equal");
}
} else {
Log.d(TAG, iapResult.toJsonString());
}
}
});
}
public void restorePurchases()
{
mPurchaseClient.queryPurchasesAsync(PurchaseClient.ProductType.INAPP, new PurchasesListener() {
@Override
public void onPurchasesResponse(IapResult iapResult, @Nullable List<PurchaseData> list) {
if (iapResult.isSuccess() && list != null) {
if(list.size() != 0){
for(PurchaseData purchaseData : list){
if(purchaseData.getPurchaseState() == PurchaseData.PurchaseState.PURCHASED){
Log.d(TAG, purchaseData.toString());
unConsumedListExecute(purchaseData);
}
}
}else{
Log.d(TAG, "list size 0");
}
} else {
Log.d(TAG, iapResult.toJsonString());
}
}
});
}
//소비되지 않은 결제리스트 소비
private void unConsumedListExecute(final PurchaseData purchaseData)
{
ConsumeParams params = ConsumeParams.newBuilder()
.setPurchaseData(purchaseData)
.build();
mPurchaseClient.consumeAsync(params, new ConsumeListener() {
@Override
public void onConsumeResponse(IapResult iapResult, @Nullable PurchaseData purchaseData) {
if (iapResult.isSuccess() && purchaseData != null) {
if (purchaseData.getPurchaseToken().equals(purchaseData.getPurchaseToken())) {
Log.d(TAG, purchaseData.toString());
}else{
Log.d(TAG, "purchaseToken not equal");
}
} else {
Log.d(TAG, iapResult.toJsonString());
}
}
});
}
private ProductDetail getSkuDetail(String pid) {
for(ProductDetail item : skuDetailsList) {
if(item.getProductId().equals(pid)) {
return item;
}
}
return null;
}
}
kotlin:
...
Author And Source
이 문제에 관하여([java/kotlin] 원스토어 인앱결제 연동), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@james-chun-dev/javakotlin-원스토어-인앱결제-연동저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)