Так что я использую флаттер для разработки приложений (очевидно, название), и это платное приложение, поэтому необходимо подтвердить лицензию. Я использую MedthodChannel для этой цели, так как я не мог найти способ флаттера.
Теперь проблема:
Таким образом, на стороне Java я проверяю проверку лицензии, а затем результат отправляется на флаттер. Так работает методный канал.
Но проблема в том, что результат посылается во флаттер даже до завершения проверки, и из-за того, какая часть флаттера считает, что лицензия не подтверждена, даже если она есть.
Я прилагаю код Java ниже
package in.navkargems.diamondtools;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.util.Log;
import com.google.android.vending.licensing.LicenseChecker;
import com.google.android.vending.licensing.LicenseCheckerCallback;
import com.google.android.vending.licensing.StrictPolicy;
import io.flutter.app.FlutterActivity;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;
public class MainActivity extends FlutterActivity {
private static final String CHANNEL = "in.navkargems.diamondtools/verify";
private static final String _key_to_verify_base64 = "MIIBIjAN...";
private Handler mHandler;
private LicenseChecker mChecker;
private LicenseCheckerCallback mLicenseCheckerCallback;
boolean licensed;
boolean checkingLicense;
boolean didCheck;
int message = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
if (methodCall.method.equals("verifyLicense")) {
String deviceId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);
Log.i("Device Id", deviceId);
mHandler = new Handler();
mLicenseCheckerCallback = new MyLicenseCheckerCallback();
mChecker = new LicenseChecker(getApplicationContext(), new StrictPolicy(), _key_to_verify_base64);
doCheck();
Log.i("License", "Check : "+didCheck);
if(didCheck){
result.success(licensed);
}
else{
result.success(false);
}
}
}
}
);
}
private void doCheck() {
didCheck = false;
checkingLicense = true;
setProgressBarIndeterminateVisibility(true);
mChecker.checkAccess(mLicenseCheckerCallback);
}
private class MyLicenseCheckerCallback implements LicenseCheckerCallback {
@Override
public void allow(int reason) {
if(isFinishing()){
Log.i("License", ""+isFinishing());
return;
}
Log.i("License","Accepted!");
message = 1;
licensed = true;
checkingLicense = false;
didCheck = true;
}
@Override
public void dontAllow(int reason) {
if(isFinishing()){
Log.i("License", ""+isFinishing());
return;
}
Log.i("License", "Reason : "+reason);
message = 0;
licensed = false;
checkingLicense = false;
didCheck = true;
}
@Override
public void applicationError(int errorCode) {
Log.i("License", "Error : "+errorCode);
if(isFinishing()){
Log.i("License", ""+isFinishing());
return;
}
message = 0;
licensed = true;
checkingLicense = false;
didCheck = false;
}
}
}
Спасибо за ваше время.