Привет друзья! Сегодня я собираюсь поделиться очень полезным блогом для In App Purchase в Android. Google предоставляет In App Billing факультет в Android. В приложении Покупка это очень простой и безопасный способ оплаты через Интернет. Пожалуйста, следуйте моему блогу шаг за шагом:
Снимок экрана
- Создайте новый проект в Android.
- Создайте класс MainActivity.java.
- Добавьте activity_main.xml в папку res / layout.
- Добавьте услуги биллинга и разрешение в Manifest.xml.
ду
- Создайте знак apk для вашего приложения.
- Загрузите свой апк в магазине Google Play.
- Создайте продукт для вашего приложения.
- подождите 6-12 часов для обновления элемента в магазине.
- Скопируйте ключ вашего аккаунта Google и вставьте его в класс BillingSecurity.java. Номер строки 135-
1
String base64EncodedPublicKey ="PUT YOUR PUBLIC KEY HERE"; - Предоставьте разрешения на выставление счетов в Manifest.xml
- добавлять
1
IMarketBillingService.javaincom.android.vending.billing package.
не
- Не используйте эмулятор для тестирования, он не поддерживает Billing Services.
- Не используйте неподписанные apk для биллинга.
- Не делись своим ключом ни с кем.
Мой код
1) MainActivity.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
package com.manish.inapppurchase;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener { Button btn1, btn2, btn3; private Context mContext=this; private static final String TAG = "Android BillingService"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn1 = (Button) findViewById(R.id.button1); btn2 = (Button) findViewById(R.id.button2); btn3 = (Button) findViewById(R.id.button3); btn1.setOnClickListener(this); btn2.setOnClickListener(this); btn3.setOnClickListener(this); startService(new Intent(mContext, BillingService.class)); BillingHelper.setCompletedHandler(mTransactionHandler); } public Handler mTransactionHandler = new Handler(){ public void handleMessage(android.os.Message msg) { Log.i(TAG, "Transaction complete"); Log.i(TAG, "Transaction status: "+BillingHelper.latestPurchase.purchaseState); Log.i(TAG, "Item purchased is: "+BillingHelper.latestPurchase.productId); if(BillingHelper.latestPurchase.isPurchased()){ showItem(); } }; }; @Override public void onClick(View v) { if (v == btn1) { if(BillingHelper.isBillingSupported()){ BillingHelper.requestPurchase(mContext, "android.test.purchased"); } else { Log.i(TAG,"Can't purchase on this device"); btn1.setEnabled(false); // XXX press button before service started will disable when it shouldnt } Toast.makeText(this, "Shirt Button", Toast.LENGTH_SHORT).show(); } if (v == btn2) { if(BillingHelper.isBillingSupported()){ BillingHelper.requestPurchase(mContext, "android.test.purchased"); } else { Log.i(TAG,"Can't purchase on this device"); btn2.setEnabled(false); // XXX press button before service started will disable when it shouldnt } Toast.makeText(this, "TShirt Button", Toast.LENGTH_SHORT).show(); } if (v == btn3) { if(BillingHelper.isBillingSupported()){ BillingHelper.requestPurchase(mContext, "android.test.purchased"); } else { Log.i(TAG,"Can't purchase on this device"); btn3.setEnabled(false); // XXX press button before service started will disable when it shouldnt } Toast.makeText(this, "Denim Button", Toast.LENGTH_SHORT).show(); } } private void showItem() { //purchaseableItem.setVisibility(View.VISIBLE); } @Override protected void onPause() { Log.i(TAG, "onPause())"); super.onPause(); } @Override protected void onDestroy() { BillingHelper.stopService(); super.onDestroy(); }} |
2) activity_main.xml
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
android:layout_width="match_parent" android:layout_height="match_parent" android:background="#0099CC" tools:context=".MainActivity" > <Button android:id="@+id/button1" android:layout_width="150dp" android:layout_height="35dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="40dp" android:background="#FFFFFF" android:text="Shirt for 5.4$" /> <Button android:id="@+id/button2" android:layout_width="150dp" android:layout_height="35dp" android:layout_below="@+id/button1" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" android:background="#FFFFFF" android:text="Tshirt for 7.4$" /> <Button android:id="@+id/button3" android:layout_width="150dp" android:layout_height="35dp" android:layout_below="@+id/button2" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" android:background="#FFFFFF" android:text="Denim for 10.7$" /></RelativeLayout> |
3) manifest.xml
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<?xml version="1.0" encoding="utf-8"?> package="com.manish.inapppurchase" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="16" /> <uses-permission android:name="com.android.vending.BILLING" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.manish.inapppurchase.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".BillingService" /> <receiver android:name=".BillingReceiver" > <intent-filter> <action android:name="com.android.vending.billing.IN_APP_NOTIFY" /> <action android:name="com.android.vending.billing.RESPONSE_CODE" /> <action android:name="com.android.vending.billing.PURCHASE_STATE_CHANGED" /> </intent-filter> </receiver> </application></manifest> |
Ссылка: Как интегрировать биллинг при покупке приложений в Android от нашего партнера JCG Маниша Шриваставы в блоге Android Hub 4, который вы опубликовали.

