Skip to content

Commit 8297cf8

Browse files
committed
Correctly handled service disconnection, informing Unity and disposing objects.
1 parent 7121529 commit 8297cf8

File tree

8 files changed

+57
-10
lines changed

8 files changed

+57
-10
lines changed

JavaPlugin/build.gradle

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ buildscript {
55
jcenter()
66
}
77
dependencies {
8-
classpath 'com.android.tools.build:gradle:3.5.2'
8+
classpath 'com.android.tools.build:gradle:4.2.2'
99
}
1010
}
1111

@@ -20,12 +20,12 @@ allprojects {
2020
apply plugin: 'com.android.library'
2121

2222
android {
23-
compileSdkVersion 29
24-
buildToolsVersion "29.0.2"
23+
compileSdkVersion 33
24+
buildToolsVersion "30.0.3"
2525

2626
defaultConfig {
2727
minSdkVersion 9
28-
targetSdkVersion 29
28+
targetSdkVersion 33
2929
versionCode 1
3030
versionName "1.0"
3131
}
@@ -35,6 +35,10 @@ android {
3535
sourceCompatibility JavaVersion.VERSION_1_7
3636
targetCompatibility JavaVersion.VERSION_1_7
3737
}
38+
39+
lintOptions {
40+
tasks.lint.enabled = false
41+
}
3842

3943
buildTypes {
4044
release {

JavaPlugin/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<application>
66
<activity
77
android:name=".BazaarIABProxyActivity"
8-
android:label="BazaarIAB" >
8+
android:label="BazaarIAB" android:exported="true" >
99
<intent-filter>
1010
<action android:name="android.intent.action.MAIN" />
1111

JavaPlugin/src/main/java/com/bazaar/BazaarIABPlugin.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,12 @@ public void onIabSetupFinished(IabResult result)
8383
mHelper = null;
8484
}
8585
}
86+
87+
public void onServiceDisconnected()
88+
{
89+
//inform Unity about service disconnect, client should reconnect again
90+
UnitySendMessage(BazaarUnityCallbacks.SERVICE_DISCONNECTED, "");
91+
}
8692
});
8793
}
8894

JavaPlugin/src/main/java/com/bazaar/BazaarUnityCallbacks.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,6 @@ public class BazaarUnityCallbacks {
1414
public static final String PURCHASE_SUCCEEDED = "purchaseSucceeded";
1515
public static final String CONSUME_PURCHASE_FAILED = "consumePurchaseFailed";
1616
public static final String CONSUME_PURCHASE_SUCCEEDED = "consumePurchaseSucceeded";
17+
18+
public static final String SERVICE_DISCONNECTED = "serviceDisconnected";
1719
}

JavaPlugin/src/main/java/com/bazaar/util/BroadcastIAB.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.content.Intent;
66
import android.content.pm.PackageInfo;
77
import android.content.pm.PackageManager;
8+
import android.os.Build;
89
import android.os.Bundle;
910
import android.os.RemoteException;
1011
import com.bazaar.util.communication.BillingSupportCommunication;
@@ -79,7 +80,12 @@ public class BroadcastIAB extends IAB {
7980
boolean connect(Context context, OnConnectListener listener) {
8081

8182
try {
82-
PackageInfo pInfo = context.getPackageManager().getPackageInfo(BAZAAR_PACKAGE_NAME, 0);
83+
int flags = 0;
84+
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
85+
{
86+
flags = PackageManager.MATCH_ALL;
87+
}
88+
PackageInfo pInfo = context.getPackageManager().getPackageInfo(BAZAAR_PACKAGE_NAME, flags);
8389
int versionCode;
8490
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {
8591
versionCode = (int) pInfo.getLongVersionCode();

JavaPlugin/src/main/java/com/bazaar/util/IabHelper.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import android.os.Handler;
2323
import android.os.RemoteException;
2424
import android.text.TextUtils;
25+
import android.util.Log;
26+
2527
import com.bazaar.util.communication.BillingSupportCommunication;
2628
import com.bazaar.util.communication.OnConnectListener;
2729
import java.util.ArrayList;
@@ -120,6 +122,8 @@ public class IabHelper {
120122
public static final String GET_SKU_DETAILS_ITEM_LIST = "ITEM_ID_LIST";
121123
public static final String GET_SKU_DETAILS_ITEM_TYPE_LIST = "ITEM_TYPE_LIST";
122124

125+
public static final String TAG = "[BazaarAIB][Plugin]";
126+
123127
/**
124128
* Creates an instance. After creation, it will not yet be ready to use. You must perform
125129
* setup by calling {@link #startSetup} and wait for setup to complete. This constructor does not
@@ -161,8 +165,11 @@ public interface OnIabSetupFinishedListener {
161165
* @param result The result of the setup process.
162166
*/
163167
public void onIabSetupFinished(IabResult result);
168+
169+
public void onServiceDisconnected();
164170
}
165171

172+
166173
/**
167174
* Starts the setup process. This will start up the setup process asynchronously.
168175
* You will be notified through the listener when the setup process is complete.
@@ -180,9 +187,22 @@ public void startSetup(final OnIabSetupFinishedListener listener) {
180187

181188
OnConnectListener connectListener = new OnConnectListener() {
182189
@Override
183-
public void connected(IAB iabService) {
190+
public void connected(IAB iabService)
191+
{
184192
checkBillingSupported(listener, iabService);
185193
}
194+
195+
@Override
196+
public void disconnected(IAB iabService)
197+
{
198+
//dispose current connection and helper
199+
if(iabConnection == iabService)
200+
{
201+
dispose();
202+
203+
listener.onServiceDisconnected();
204+
}
205+
}
186206
};
187207

188208
IAB serviceIAB = new ServiceIAB(logger);

JavaPlugin/src/main/java/com/bazaar/util/ServiceIAB.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import android.content.ServiceConnection;
1010
import android.content.pm.PackageManager;
1111
import android.content.pm.ResolveInfo;
12+
import android.os.Build;
1213
import android.os.Bundle;
1314
import android.os.IBinder;
1415
import android.os.RemoteException;
@@ -59,13 +60,14 @@ public boolean connect(Context context, final OnConnectListener listener) {
5960
@Override
6061
public void onServiceDisconnected(ComponentName name) {
6162
logger.logDebug("Billing service disconnected.");
62-
mService = null;
63+
listener.disconnected(myIabService);
6364
}
6465

6566
@Override
6667
public void onServiceConnected(ComponentName name, IBinder service) {
6768
logger.logDebug("Billing service connected.");
68-
if (disposed()) {
69+
if (disposed())
70+
{
6971
return;
7072
}
7173
mSetupDone = true;
@@ -78,8 +80,13 @@ public void onServiceConnected(ComponentName name, IBinder service) {
7880
Intent serviceIntent = new Intent("ir.cafebazaar.pardakht.InAppBillingService.BIND");
7981
serviceIntent.setPackage(BAZAAR_PACKAGE_NAME);
8082

83+
int flags = 0;
84+
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
85+
{
86+
flags = PackageManager.MATCH_ALL;
87+
}
8188
PackageManager pm = context.getPackageManager();
82-
List<ResolveInfo> intentServices = pm.queryIntentServices(serviceIntent, 0);
89+
List<ResolveInfo> intentServices = pm.queryIntentServices(serviceIntent, flags);
8390
if (!intentServices.isEmpty()) {
8491
// service available to handle that Intent
8592
return context.bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);

JavaPlugin/src/main/java/com/bazaar/util/communication/OnConnectListener.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@
44

55
public interface OnConnectListener {
66
void connected(IAB iabService);
7+
8+
void disconnected(IAB iabService);
79
}

0 commit comments

Comments
 (0)