Как заставить Firebase Invites работать на эмуляторе? - PullRequest
0 голосов
/ 06 октября 2018

Я тестирую Firebase Invites из эмулятора на основе учебника с официального сайта.

implementation 'com.google.firebase:firebase-invites:16.0.4'

Используемый эмулятор:

CPU / ABI: GoogleИграть в Intel Atom (x86)

Цель: google_apis_playstore [Google Play] (уровень API 28)

Скин: pixel_2

Я пытаюсь вызвать активность для результата, напримерthis.

private void onInviteClicked() {
    Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title))
            .setMessage(getString(R.string.invitation_message))
            .setDeepLink(Uri.parse(getString(R.string.invitation_deep_link)))
            .setCustomImage(Uri.parse(getString(R.string.invitation_custom_image)))
            .setCallToActionText(getString(R.string.invitation_cta))
            .build();
    startActivityForResult(intent, REQUEST_INVITE);
}

Но в ActivityOnResult я всегда получаю Activity.RESULT_CANCELLED в качестве кода результата.

if (requestCode == REQUEST_INVITE) {
    if (resultCode == RESULT_OK) {
        // Get the invitation IDs of all sent messages
        String[] ids = AppInviteInvitation.getInvitationIds(resultCode, data);
        for (String id : ids) {
            Log.d(TAG, "onActivityResult: sent invitation " + id);
        }
    } else {
        // Sending failed or it was canceled, show failure message to the user
        // ...
    }
}

Оказывается, это происходит из-за сбоя в библиотеке invites:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.google.android.gms.ui, PID: 10555
java.lang.RuntimeException: Error receiving broadcast Intent { act=com.google.android.gms.appinvite.intent.action.INVITE_SENT cat=[android.intent.category.DEFAULT] flg=0x10 (has extras) } in com.google.android.gms.appinvite.AppInviteChimeraActivity$AppInviteResponseReceiver@d32d00e
    at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1401)
    at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
 Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@93c43be -- permission denied for window type 2003
    at android.view.ViewRootImpl.setView(ViewRootImpl.java:822)
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
    at fzg.a(:com.google.android.gms@14366040@14.3.66 (100700-213742215):22)
    at fzg.a(:com.google.android.gms@14366040@14.3.66 (100700-213742215):15)
    at fzg.a(:com.google.android.gms@14366040@14.3.66 (100700-213742215):1)
    at com.google.android.gms.appinvite.AppInviteChimeraActivity.a(:com.google.android.gms@14366040@14.3.66 (100700-213742215):91)
    at com.google.android.gms.appinvite.AppInviteChimeraActivity$AppInviteResponseReceiver.a(:com.google.android.gms@14366040@14.3.66 (100700-213742215):2)
    at xbc.onReceive(:com.google.android.gms@14366040@14.3.66 (100700-213742215):1)
    at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1391)
    at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2) 
    at android.os.Handler.handleCallback(Handler.java:873) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:193) 
    at android.app.ActivityThread.main(ActivityThread.java:6669) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 

Это происходит только на эмуляторе, а не на физическом устройстве.

Кто-нибудь знает, как заставить Firebase Invites работать также на эмуляторе?

1 Ответ

0 голосов
/ 06 октября 2018

WindowManager.LayoutParams константа 2003 равно TYPE_SYSTEM_ALERT, устарела на уровне API 26. Скомпилируйте API 25 (это может быть физическое устройство) или используйте TYPE_APPLICATION_OVERLAY.с одной строкой из build.gradle трудно понять, против какого API даже запускается код.

подсказка: убедитесь, что вы запускаете его на образе эмулятора с установленными службами Play Services.

...