首页 > 解决方案 > 如何在flutter中登录谷歌时修复“Safari无法打开页面......”错误谷歌登录

问题描述

该应用程序刚刚开始,我先登录。它既适用于android也适用于ios,但几天后我恢复使用该应用程序,登录仅适用于android。

在iOS上,当我使用谷歌登录时,它会打开一个accounts.google.com我认为的页面,然后它应该要求输入电子邮件和密码,但它没有。它只说

Safari cannot open the page because it could not establish a secure connection to the server.

的输出flutter doctor

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel master, v1.5.9-pre.56, on Mac OS X 10.14.4 18E226, locale en-KH)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.2.1)
[!] Android Studio (version 3.2)
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
[✓] VS Code (version 1.33.1)
[✓] Connected device (1 available)

! Doctor found issues in 1 category.

pubspec.yml

name: xxx
description: xxx

version: 0.0.1

environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  google_sign_in: ^4.0.1+3
  rxdart: ^0.21.0
  corsac_jwt: ^0.1.2
  graphql_flutter: ^1.0.0
  qr_flutter: ^2.0.0

  cupertino_icons: ^0.1.2

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:
  uses-material-design: true

  assets:
   - assets/google.png

这里是login_screen.dart

import 'package:flutter/material.dart' as flutter_material;
import 'package:flutter/cupertino.dart' show CupertinoButton;

import '../blocs/bloc_provider.dart' show BlocProvider;
import '../blocs/login_bloc.dart' show LoginBloc;

const String _loginInText = 'Sign In';
const String _googleIconPath = 'assets/google.png';

const double _iconWidth = 39.0;
const double _iconHeight = 39.0;
const double _sizedBoxWidth = 10.0;
const double _signInFontSize = 23.0;

class LoginScreen extends flutter_material.StatelessWidget {
  @override
  flutter_material.Widget build(flutter_material.BuildContext context) {
    final LoginBloc loginBloc = BlocProvider.of<LoginBloc>(context);

    return flutter_material.Scaffold(
      body: flutter_material.Center(
        child: CupertinoButton(
          // splashColor: flutter_material.Colors.transparent,
          child: flutter_material.Row(
            mainAxisSize: flutter_material.MainAxisSize.min,
            crossAxisAlignment: flutter_material.CrossAxisAlignment.center,
            children: const <flutter_material.Widget>[
              const flutter_material.Image(
                image: flutter_material.AssetImage(_googleIconPath),
                width: _iconWidth,
                height: _iconHeight,
              ),
              const flutter_material.SizedBox(width: _sizedBoxWidth, height: 0.0),
              const flutter_material.Text(
                _loginInText,
                style: flutter_material.TextStyle(
                  fontSize: _signInFontSize,
                ),
              ),
            ],
          ),
          onPressed: loginBloc.signIn,
        ),
      ),
    );
  }
}

logic_bloc.dart

import 'package:google_sign_in/google_sign_in.dart'
  show GoogleSignIn, GoogleSignInAccount, GoogleSignInAuthentication;
import 'package:rxdart/rxdart.dart' as rxdart;

import './bloc_provider.dart' show BlocBase;

class LoginBloc extends BlocBase {
  final GoogleSignIn _gSignIn = GoogleSignIn(scopes: ['openid']);

  final rxdart.PublishSubject<GoogleSignInAuthentication> _googleSignIn =
    rxdart.PublishSubject<GoogleSignInAuthentication>();

  rxdart.Observable<GoogleSignInAuthentication> get loginStream => this._googleSignIn.stream;

  void signIn() async {
    final GoogleSignInAccount account = await this._gSignIn.signIn();

    if (account != null) {
      this._googleSignIn.sink.add(await account.authentication);
    }
  }

  void signOut() async {
    await this._gSignIn.signOut();

    this._googleSignIn.sink.add(null);
  }

  @override
  void dispose() async {
    await this._googleSignIn.drain();
    this._googleSignIn.close();
  }
}

所以下面是实际结果:

更新 1:我还测试了包的示例。它还显示无法连接到页面

标签: fluttergoogle-signin

解决方案


在 iOS 模拟器中

设置 > 开发人员 > 允许 HTTP 服务(打开);

重启 Xcode 和模拟器。


推荐阅读