Библиотека проверки лицензии Google Play с флаттером - PullRequest
2 голосов
/ 17 марта 2019

Так что я использую флаттер для разработки приложений (очевидно, название), и это платное приложение, поэтому необходимо подтвердить лицензию. Я использую 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;

        }

      }


    }

Спасибо за ваше время.

...