web-dev-qa-db-ja.com

GoogleSignInボタンをクリックするとアプリがクラッシュする

Google Sign-In SDK 4.0.1を使用しています。 googleSignInButtonを押すと、アプリがクラッシュします。そして、以下のエラー、これを修正する方法を与えました:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Your app is missing support for the following URL schemes: com.googleusercontent.apps.107731993306-6s44u18onibp6gi0ddj94si1aifshhg6'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000101ac0d4b __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x000000010110121e objc_exception_throw + 48
    2   CoreFoundation                      0x0000000101b2a2b5 +[NSException raise:format:] + 197
    3   xxxxx                           0x000000010084b3cb -[GIDSignIn signInWithOptions:] + 246
    4   xxxxx                           0x000000010084efc2 -[GIDSignInButton pressed] + 242
    5   UIKit                               0x00000001028f78bc -[UIApplication sendAction:to:from:forEvent:] + 83
    6   UIKit                               0x0000000102a7dc38 -[UIControl sendAction:to:forEvent:] + 67
    7   UIKit                               0x0000000102a7df51 -[UIControl _sendActionsForEvents:withEvent:] + 444
    8   UIKit                               0x0000000102a7ce4d -[UIControl touchesEnded:withEvent:] + 668
    9   UIKit                               0x0000000102965545 -[UIWindow _sendTouchesForEvent:] + 2747
    10  UIKit                               0x0000000102966c33 -[UIWindow sendEvent:] + 4011
    11  UIKit                               0x00000001029139ab -[UIApplication sendEvent:] + 371
    12  UIKit                               0x000000010310072d __dispatchPreprocessedEventFromEventQueue + 3248
    13  UIKit                               0x00000001030f9463 __handleEventQueue + 4879
    14  CoreFoundation                      0x0000000101a65761 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    15  CoreFoundation                      0x0000000101a4a98c __CFRunLoopDoSources0 + 556
    16  CoreFoundation                      0x0000000101a49e76 __CFRunLoopRun + 918
    17  CoreFoundation                      0x0000000101a49884 CFRunLoopRunSpecific + 420
    18  GraphicsServices                    0x00000001074cfa6f GSEventRunModal + 161
    19  UIKit                               0x00000001028f5c68 UIApplicationMain + 159
    20  xxxxxxxx                           0x00000001007c449f main + 111
    21  libdyld.dylib                       0x0000000104d5368d start + 1
    22  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException`

私のAppDelegate.Swiftは

class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate {
public func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
   if (error == nil) {

    let userId:NSString = user.userID as NSString;                  // For client-side use only!
    let idToken: NSString = user.authentication.idToken as NSString; // Safe to send to the server
    let fullName:NSString = user.profile.name as NSString;
    let givenName:NSString = user.profile.givenName as NSString;
    let familyName:NSString = user.profile.familyName as NSString;
    let email:NSString = user.profile.email as NSString;
    print(userId)
    print(userId,idToken,fullName,givenName,familyName,email)
    }

   else {
    print("\(error.localizedDescription)")
    }
}

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    let kclientID:NSString = "107731993306-xxxxxxxxxxxxxxxxx.apps.googleusercontent.com"

   GIDSignIn.sharedInstance().clientID = kclientID as String!

    GIDSignIn.sharedInstance().delegate = self
    return true
}


func application(application: UIApplication,
                 openURL url: NSURL, options: [String: AnyObject], annotation:Any, sourceApplication:String?) -> Bool {

    return GIDSignIn.sharedInstance().handle(url as URL!, sourceApplication:sourceApplication, annotation: annotation)
} 

解決策を教えてください。なぜクラッシュするのですか?

21
Vikas

エラーが明確に示しているように、アプリにはURLスキームのサポートがありません。

Info.plistに次のスキームを追加します

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>***Your bundle ID***</string>
        </array>
    </dict>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>com.googleusercontent.apps.107731993306-6s44u18onibp6gi0ddj94si1aifshhg6</string>
        </array>
    </dict>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>***Something here***</string>
        </array>
    </dict>
</array>

このURLでIDを確認してください=> https://developers.google.com/identity/sign-in/ios/start-integrating

Info.plistは次のようになります->

enter image description here

44
Kakshil Shah

プロジェクトにURLスキームを追加する必要があります

  1. プロジェクト構成を開きます。左側のツリービューでプロジェクト名をダブルクリックします。 [〜#〜] targets [〜#〜]セクションからアプリを選択し、[情報]タブを選択してURLタイプセクション
  2. [+]ボタンをクリックし、URLスキームを追加します-com.googleusercontent.apps.107731993306-6s44u18onibp6gi0ddj94si1aifshhg6

https://developers.google.com/identity/sign-in/ios/start-integrating#add_a_url_scheme_to_your_project

enter image description here

25
Jack

以下を再確認してください:

AppDelegatereverse DNSの場合:

GIDSignIn.sharedInstance().clientID = "536164374389-ivga9a9at2g31nfmhpvdyhc98yf6afnr.apps.googleusercontent.com"

Info.plistストレート DNS:

<string>com.googleusercontent.apps.536164374389-ivga9a9at2g31nfmhpvdyhc98yf6afnr</string>
3
Argus

Xcodeはあなたに文字列を与えます-下の画像のようにここに入れてください

enter image description here

0
coders

通常のIDではなく、逆のクライアントIDを追加する必要があります。

0
Divyesh Vasoya