扑动 google_sign_in 崩溃:__exceptionPreprocess + 294

Posted

技术标签:

【中文标题】扑动 google_sign_in 崩溃:__exceptionPreprocess + 294【英文标题】:flutter google_sign_in crash : __exceptionPreprocess + 294 【发布时间】:2018-11-05 06:32:48 【问题描述】:

我在 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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

谢谢兄弟,这个解决方案对我有用。但是每次,它都要求提供不显示以前登录帐户的凭据.. 你观察到了吗?【参考方案3】:

刚刚遇到同样的问题。这是因为我添加了 Google 和 Facebook 登录。

解决办法:

调整 Info.plist。搜索CFBundleURLTypes。你会看到你有两次。那是错的。从 Facebook 复制 &lt;string&gt;fb??????????????&lt;/string&gt; 部分并将其粘贴到 Google 部分中的同一数组中。然后从 Facebook 部分中删除 CFBundleURLTypes

背景:

如果您只是按照 Google 登录和 Facebook 登录中的说明进行操作,那么您将为 Google 和 Facebook 粘贴一个 CFBundleURLTypes 部分。只有后一个会被捡起。所以谷歌不在里面。因此,当尝试使用 google 登录时,它会引发异常,因为它没有正确设置。因为 google url 方案被 facebook 覆盖了。

帮助我找出问题的相关问题:

App getting crash when click on GoogleSignIn button https://github.com/googlesamples/google-services/issues/81

【讨论】:

这个,我不知道我是怎么意识到的,但是非常感谢,我在 VS Code 中使用的 plist 插件应该警告我有重复的条目,但是现在我会小心一点【参考方案4】:

不确定是什么问题。我又做了一遍,现在可以了。也许这是一个剪切粘贴错误。

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

【讨论】:

很高兴您能够修复它。不过,如果您能找到重现崩溃的可靠方法,请考虑提交问题 @github.com/flutter/flutter/issues

以上是关于扑动 google_sign_in 崩溃:__exceptionPreprocess + 294的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - google_sign_in 为 iOS Simulator-x86_64 构建,但尝试链接为 iOS Simulator-arm64 构建的文件 [重复]

NativeWindow_01_CreateWindow(Ex)_VC6

sh ex__bash_boolean.sh

WordPress翻译中 __()_e()_x_ex 和 _n 的用法及区别

ex10_2共同字符

ex10_5回文串检查