Gelir elde etme açısından abonelik sistemi eklemek oldukça önemlidir. Bu yüzden bir çoğumuz uygulamamıza reklam ekledikten sonra premium üyelik gibi abonelik sistemleri ekleyerek reklam kaldırma imkanı sunar ve daha çok gelir elde etmeye çalışırız. Ancak Google’ın ödeme kütüphanesi bir çoğumuza karmaşık geldiği için alternatif ve çok kullanılan ButterKnife kütüphanesi çıkmıştır. Şimdi geçelim nasıl abonelik sistemi ekleyebileceğimize.
Android JAVA Uygulamaya Abonelik Sistemi Ekleme:
Öncelikle kullanacağımız kütüphaneleri build.gradle(:app) dosyasına ekleyelim. Bu dosyada dependencies kısmında en alta aşağıdaki kodları ekleyin:
implementation 'com.android.billingclient:billing:3.0.0'
implementation 'com.jakewharton:butterknife:10.2.3'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3'
Ardından bir Java Fragment’i oluşturun. Oluştururken Fragment => Blank Fragment seçeneklerini seçin ve FragmentPremium adını verin.
Ardından aşağıya eklediğim kodu bu sayfaya ekleyin: (Paket adı kısımlarını değiştirmeyi unutmayın)
package com.paketadi.fragment;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import com.android.billingclient.api.AcknowledgePurchaseParams;
import com.android.billingclient.api.AcknowledgePurchaseResponseListener;
import com.android.billingclient.api.BillingClient;
import com.android.billingclient.api.BillingClientStateListener;
import com.android.billingclient.api.BillingFlowParams;
import com.android.billingclient.api.BillingResult;
import com.android.billingclient.api.Purchase;
import com.android.billingclient.api.PurchasesUpdatedListener;
import com.android.billingclient.api.SkuDetails;
import com.android.billingclient.api.SkuDetailsParams;
import com.android.billingclient.api.SkuDetailsResponseListener;
import com.paketadi.app.R;
import com.paketadi.asyncTask.LoadPremium;
import com.paketadi.interfaces.SuccessListener;
import com.paketadi.utils.Constant;
import com.paketadi.utils.Methods;
import java.util.ArrayList;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class FragmentPremium extends Fragment implements PurchasesUpdatedListener {
private Button buttonbuy;
private View view;
private BillingClient mBillingClient;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_premium, container, false);
buttonbuy = (Button) view.findViewById(R.id.btn_buy_premium);
return view;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ButterKnife.bind(getActivity());
mBillingClient = BillingClient.newBuilder(getActivity()).enablePendingPurchases().setListener(this).build();
mBillingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK)
{
List<String> skuListInAPP = new ArrayList<>();
skuListInAPP.add("premium");
// play console'da oluşturduğunuz aboneliğin ürün kimliği
SkuDetailsParams.Builder paramsINAPP = SkuDetailsParams.newBuilder();
paramsINAPP.setSkusList(skuListInAPP).setType(BillingClient.SkuType.SUBS);
mBillingClient.querySkuDetailsAsync(paramsINAPP.build(), new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(@NonNull BillingResult billingResult, @Nullable List<SkuDetails> list) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
for (Object skuDetailsObject : list) {
SkuDetails skuDetails = (SkuDetails) skuDetailsObject;
if(skuDetails.getSku().equals("premium")) {
buttonbuy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails)
.build();
mBillingClient.launchBillingFlow(getActivity(),flowParams);
}
});
}
}
}
}
});
}
else
{
Toast.makeText(getActivity(),"satın alma başarısız!",Toast.LENGTH_LONG).show();
}
}
@Override
public void onBillingServiceDisconnected() {
Toast.makeText(getActivity(),"satın alma başarısız!",Toast.LENGTH_LONG).show();
}
});
}
@Override
public void onPurchasesUpdated(@NonNull BillingResult billingResult, @Nullable List<Purchase> list) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && list != null)
{
for (Purchase purchase: list)
{
if (!purchase.isAcknowledged())
{
AcknowledgePurchaseParams acknowledgePurchaseParams= AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(purchase.getPurchaseToken())
.build();
mBillingClient.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener() {
@Override
public void onAcknowledgePurchaseResponse(@NonNull BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
if (purchase.getSku().equals("premium"))
{
try {
//Satın alma başarılıysa yapılacak işlemler
}
catch (Exception e)
{
System.out.println("Değer: "+e);
}
}
}
}
});
}
}
}
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED)
{
Toast.makeText(getActivity(),getResources().getString(R.string.premium_error),Toast.LENGTH_SHORT).show();
}
}
}