flutter google_sign_in crash:__ exceptionPreprocess + 294

时间:2018-05-25 20:17:40

标签: flutter

我在flutter应用中使用google_sign_in插件进行登录。使用the example中的代码登录的代码只是:

GoogleSignIn _googleSignIn = new GoogleSignIn(
  scopes: <String>[
    'email',
    'https://www.googleapis.com/auth/spreadsheets',
    'https://www.googleapis.com/auth/drive.metadata',
  ],
);

Future<Null> _handleSignIn() async {
    print("_handleSignIn");
    try {
      await _googleSignIn.signIn();
    } catch (error) {
      print("We failed");
      print(error);
    }
  }

这适用于Android。我按下登录按钮,弹出窗口,我就可以登录了。

但是,这个简单的例子在iOS上崩溃了。当应用程序在上面调用_handleSignIn时,_googleSignIn.signIn()调用会崩溃应用程序(它会消失)并显示错误消息:

flutter: _handleSignIn
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010fe581e6 __exceptionPreprocess + 294
    1   libobjc.A.dylib                     0x000000010f4ed031 objc_exception_throw + 48
    2   CoreFoundation                      0x000000010fecd975 +[NSException raise:format:] + 197
    3   Runner                              0x000000010ce61d8b -[GIDSignIn signInWithOptions:] + 242
    4   Runner                              0x000000010ce5e777 -[GIDSignIn signIn] + 64
    5   Runner                              0x000000010ce591b2 -[FLTGoogleSignInPlugin handleMethodCall:result:] + 2114
    6   Flutter                             0x000000010d1af716 __45-[FlutterMethodChannel setMethodCallHandler:]_block_invoke + 118
    7   Flutter                             0x000000010d1c5370 _ZNK5shel<…>
Lost connection to device.

我没有构建iOS应用程序的经验,所以我可能做错了什么。我按了the instructions并添加了来自firebase.com的GoogleService-Info.plist并按照指示更新了我的Info.plist

有什么想法吗?有任何方法可以获得更好的错误消息,以便我可以找出可能出错的地方吗?

4 个答案:

答案 0 :(得分:3)

也有同样的问题。这是因为我添加了Google和Facebook登录信息。

解决方案:

调整信息列表。搜索CFBundleURLTypes。您将看到两次。那是错的。从Facebook上复制<string>fb??????????????</string>部分,并将其粘贴到Google部分的同一数组中。然后从Facebook部分中删除CFBundleURLTypes

背景:

如果您只按照Google登录名和Facebook登录名中的说明进行操作,则将CFBundleURLTypes部分粘贴到Google上,将其粘贴到Facebook上。只有后者会被接走。因此,谷歌之一不在那里。因此,当尝试使用Google登录名登录时,由于设置不正确,将引发异常。因为google网址方案已被facebook覆盖。

帮助我弄清问题的相关问题:

答案 1 :(得分:2)

我的案子是我更新了GoogleService-Info.plist,但忘记根据CFBundleURLTypes中的REVERSED_CLIENT_ID更新Info.plist

答案 2 :(得分:1)

如果您成功地将GoogleService-Info.plist移到了正确的目录并将CFBundleURLTypes添加到Info.plist中,但仍然遇到崩溃,则原因可能在google_sign_in包本身中。

此软件包在iOS设备(Futter issue)上存在一个已知问题

长话短说:名为@buuth的用户发现对属性hostedDomainclientId的空值检查根本不存在,因此您只需要显式设置它们即可。

GoogleSignIn googleSignIn = GoogleSignIn( 
  scopes: ['email','profile'],
  hostedDomain: "", 
  clientId: "",);

答案 3 :(得分:0)

不确定问题是什么。我重新做了一遍,现在它起作用了。也许这是一个剪切粘贴错误。

我所做的唯一新事就是将常规选项卡中的团队设置为我的个人团队。以前它没有设置。不知道这是否重要。

Set team