相关疑难解决方法(0)

将 Android 应用连接到 Firebase Auth 模拟器,但不允许明文 HTTP 流量

我有一个使用 Firebase 作为后端的 Flutter 应用程序。我使用 Firebase 模拟器在调试模式下测试我的应用程序。

为了允许物理设备连接到我在开发计算机上运行的模拟器,我更改了配置,以便模拟器在我的本地网络上使用该计算机的本地 IP 运行。(我通过 Dart 环境变量指定此 IP。)

firebase.json

{
  // ...
  "emulators": {
    "auth": {
      "host": "0.0.0.0",  // this is to avoid having to hard-code my local IP, which might change
      "port": 9099
    },
    "firestore": {
      "host": "0.0.0.0",
      "port": 8080
    },
    // ...
  }
}

Run Code Online (Sandbox Code Playgroud)

main.dart

if (kDebugMode) {
  const emulatorHost =
      String.fromEnvironment("EMULATOR_HOST", defaultValue: "localhost");
  FirebaseAuth.instance.useAuthEmulator(emulatorHost, 9099);
  FirebaseFirestore.instance.useFirestoreEmulator(emulatorHost, 8080);
}
Run Code Online (Sandbox Code Playgroud)

为了在我的应用程序上测试 Web 版本,我启动模拟器并通过 Android Studio 运行 Web 应用程序,所有这些都在同一个应用程序上进行。该应用程序能够与 Auth 模拟器进行通信,没有问题。

但是,当我在物理 Android 设备或 Android …

android firebase firebase-tools firebase-authentication

7
推荐指数
0
解决办法
830
查看次数

OkHttp:<-- HTTP 失败:java.net.UnknownServiceException:网络安全策略不允许与 10.0.2.2 的 CLEARTEXT 通信

我已经成功地在我的 Android 应用程序中使用 Firebase 身份验证实现了谷歌登录在此处输入图片说明

如您所见,我已使用我的帐户登录并显示在 Firebase 控制台上。

使用 Google Sign-in 登录后,函数firebaseAuthWithGoogle使用 Firebase 对用户进行身份验证:

private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
    Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mFirebaseAuth.signInWithCredential(credential)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInWithCredential:success");
                    final FirebaseUser user = mFirebaseAuth.getCurrentUser();


                    //This is to connect to the http server and save the user data …
Run Code Online (Sandbox Code Playgroud)

httpserver android-studio retrofit okhttp android-security

6
推荐指数
2
解决办法
5930
查看次数

Firebase Cloud Function:&amp; Flutter:无法在模拟器上使用 https 可调用函数 [firebase_functions/unavailable] 不可用

我试图从我的 flutter 应用程序中使用模拟器调用 HTTPS 可调用函数,但它似乎不起作用。我调用该函数后,总是需要大约 5 秒的时间并返回错误。如果我将该功能部署在服务器上,它就可以完全正常工作。

这是我的功能

exports.try = functions.https.onCall((data, context) => {
  return 1;
});
Run Code Online (Sandbox Code Playgroud)

它位于us-central1

我是如何启动模拟器的

firebase emulators:start --only functions
Run Code Online (Sandbox Code Playgroud)

我如何从代码中调用它

FirebaseFunctions functions = FirebaseFunctions.instance;
functions.useFunctionsEmulator(origin: "http://10.0.2.2:5001");
HttpsCallable callable = functions.httpsCallable('games-oneToHundred-try');
try {
  var result  = await callable();
  print(result.data);
} catch (e) {
  print(e);
}
Run Code Online (Sandbox Code Playgroud)

抛出的错误是:

[firebase_functions/unavailable] UNAVAILABLE
Run Code Online (Sandbox Code Playgroud)

我按照从 Flutter 应用程序连接到本地 Firebase 功能模拟器时出错中的建议修改了 Android 清单,如下所示:

android:usesCleartextTraffic="true"
Run Code Online (Sandbox Code Playgroud)

firebase flutter google-cloud-functions

5
推荐指数
1
解决办法
2395
查看次数

如何从 Flutter 调用本地 Firebase 函数(在模拟器中)?

我在本地模拟器中设置了 Cloud Functions。我编写了一些函数并使用函数模拟器在浏览器中测试了它们。现在我尝试从本地 Flutter 应用程序调用这些函数而不部署它们。但是,我找不到将我的 Flutter 应用程序连接到函​​数的 localhost API 的方法。有办法做到这一点吗?

firebase flutter google-cloud-functions google-cloud-firestore

2
推荐指数
1
解决办法
3456
查看次数

从 Flutter 应用通过本地网络连接到 Firebase 函数模拟器

我正在尝试从我的测试 Android 设备连接到我的 Firebase 功能模拟器。

\n

当我运行模拟器时,输出是:

\n
\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 \xe2\x9c\x94  All emulators ready! It is now safe to connect your app. \xe2\x94\x82\n\xe2\x94\x82 i  View Emulator UI at http://localhost:4000                \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 Emulator  \xe2\x94\x82 Host:Port      \xe2\x94\x82 View in Emulator UI             \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 Functions \xe2\x94\x82 localhost:5001 \xe2\x94\x82 http://localhost:4000/functions \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n  Emulator Hub running at localhost:4400\n  Other reserved ports: 4500\n\nIssues? Report them at https://github.com/firebase/firebase-tools/issues and attach the *-debug.log files.\n
Run Code Online (Sandbox Code Playgroud)\n

在我的 Flutter 应用程序中,我执行以下操作来进行连接:

\n
FirebaseFunctions.instance.useFunctionsEmulator(origin: \'http://192.168.1.158:5001\');\n
Run Code Online (Sandbox Code Playgroud)\n

我已添加android:usesCleartextTraffic="true"到我的 AndroidManifest 和 anetwork_security_config.xml如此处此处 …

android firebase firebase-tools flutter google-cloud-functions

2
推荐指数
1
解决办法
1188
查看次数