Пользовательский плагин Unity Adroid. Зависание приложения при возврате из другой активности

Я разрабатываю игру для Android с Unity. Игра использует firebase для управления всей информацией об игре и пользователях. Я хотел дать игроку возможность войти в систему с учетной записью Google, и я создал собственный плагин для Android с Android Studio, который вызывает действие GoogleSignIn, чтобы получить токен и передать его коду Unity для выполнения части входа в Firebase.

Проблема возникает, когда приложение зависает, когда оно возвращается из GoogleSignInActivity. (Не всегда, но почти всегда). Все функции обратного вызова вызываются правильно, но кажется, что UnityPlayer перестает работать или что-то подобное, потому что объекты в сцене не выполняют свою функцию обновления, а текстуры вообще не отображаются, оставляя черный экран.

Я пробовал расширить UnityPlayerActivity и startActivityForResult оттуда, но это не работает. Кроме того, я попытался создать второе действие, которое вызывает действие GoogleSignin. Второй использует метод обратного вызова для возврата результата в Unity.

Это фактический код моего плагина:

public interface ShareStringCallback {
        public void onLoginComplete(String result);
    }

    public void signIn(final ShareStringCallback callback){
        Log.i(LOGTAG, "signIn: ");
        mainActivity.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                try {
                    Log.i(LOGTAG, "RunningIntent: ");
                    Intent shareIntent = new Intent();
                    shareIntent.setClass(mainActivity, OnResultCallback.class);
                    OnResultCallback.shareStringCallBack = callback;
                    mainActivity.startActivity(shareIntent);
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.i(LOGTAG, "error sharing intent: " + e);
                }
            }
        });
    }
    public void signOut(){
        Log.i(LOGTAG,"google signout in plugin");
        OnResultCallback.SignOut();
    }

А это код активности OnResutlCallback:

public static MyPlugin.ShareStringCallback shareStringCallBack;

    private static final int RC_SIGN_IN = 9001;

    Boolean finishing = false;
    void MyFinish(String result){
        if(finishing){
            return;
        }
        finishing = true;
        if(shareStringCallBack!=null){
            shareStringCallBack.onLoginComplete(result);
        }
        shareStringCallBack = null;
        finish();
    }

    protected static GoogleSignInClient InitGoogle(Activity activity) {
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(MyPlugin.mainActivity.getString(R.string.default_web_client_id))
                .requestEmail()
                .build();

        return GoogleSignIn.getClient(activity, gso);
    }
    protected GoogleSignInClient InitGoogle() {
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();

        return GoogleSignIn.getClient(this, gso);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();

        try {
            Intent signInIntent = InitGoogle().getSignInIntent();
            startActivityForResult(signInIntent, RC_SIGN_IN);
            MyFinish("");
        }catch (Exception e){
            e.printStackTrace();
            Log.i(LOGTAG,"Error: " + e.getLocalizedMessage());
            MyFinish("");
        }
    }

    GoogleSignInAccount mGoogleSignInAccount;

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode,resultCode,data);
        String result = "";
        if (requestCode == RC_SIGN_IN) {
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            try {
                mGoogleSignInAccount = task.getResult(ApiException.class);
                result = mGoogleSignInAccount.getIdToken();
            } catch (ApiException e) {
                Log.w(LOGTAG, "Google sign in failed", e);
                Log.i(LOGTAG, e.getMessage());
                Log.i(LOGTAG, CommonStatusCodes.getStatusCodeString(e.getStatusCode()));
            }
            MyFinish(result);
        }
    }

    public static void SignOut(){
        Log.i(MyPlugin.LOGTAG,"signOut");
        InitGoogle(MyPlugin.mainActivity).signOut();
    }

Кто-то знает, почему это происходит, или что я делаю не так? Большое спасибо.

0 ответов

Другие вопросы по тегам