android - 如何使 Firebase 邀请在模拟器上工作?

标签 android firebase firebase-invites

我正在测试 Firebase Invites来自基于官方网站教程的模拟器。

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

使用的模拟器:

CPU/ABI: Google Play Intel Atom (x86)

Target: google_apis_playstore [Google Play] (API level 28)

Skin: pixel_2

我尝试为这样的结果调用 Activity 。

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 library出现了crash:

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 邀请也能在模拟器上运行吗?

最佳答案

WindowManager.LayoutParams常量 2003TYPE_SYSTEM_ALERT,已在 API 级别 26 中弃用。要么针对 API 25(可能是该物理设备)构建,要么改用 TYPE_APPLICATION_OVERLAY。使用来自 build.gradle 的一行,很难理解代码甚至针对哪个 API 运行。

提示:确保在安装了 Play 服务的模拟器镜像上运行它。

关于android - 如何使 Firebase 邀请在模拟器上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52678218/

相关文章:

android - 圆角 cardView 在 RecyclerView 中不起作用 - Android?

android - 使用 Android AudioRecorder 录制 .Wav

ios - 如何在 Swift 中过滤 Firebase 数据?

android - Firebase 邀请说邀请已发送但尚未收到

java - SMS_RECEIVED onReceive android 2.3.5 不触发

android - NativeScript、Android - 与本地主机的连接失败

ios - 如何避免 Firebase fatal error : unexpectedly found nil while unwrapping an Optional value?

ios - 如何从最新到最旧的顺序从 Firebase 获取图像?

android - 检查 Firebase 邀请是否引导至 Play 商店

Firebase 邀请 React Native