我可以使用google drive sdk和iOS上的google登录sdk的身份验证信息吗?

zch*_*nah 4 ios google-drive-api

我们已经有一个登录模块使用Google Sign-In sdk.登录成功后,Google登录会提供GIDAuthentication对象.

现在我想使用google drive sdk访问用户的google驱动器,这需要GTMOAuth2Authentication来提供身份验证信息.那么我可以使用GIDAuthentication它为驱动程序sdk构建GTMOAuth2Authentication吗?

手动分配accessToken值似乎不起作用(添加驱动器范围).

eme*_*mem 6

是的你可以!

使用以下步骤:

  1. 按照以下步骤添加Google SignIn,按照以下步骤操作:https://developers.google.com/identity/sign-in/ios/start-integrating.确保为项目启用Google Drive API.

  2. 初始化登录对象时,请不要忘记添加Google Drive API范围:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Initialize sign-in
        var configureError: NSError?
        GGLContext.sharedInstance().configureWithError(&configureError)
        assert(configureError == nil, "Error configuring Google services: \(configureError)")
    
        GIDSignIn.sharedInstance().delegate = self
    
        // Use here whatever auth scope you wish (e.g., kGTLAuthScopeDriveReadonly, 
        // kGTLAuthScopeDriveMetadata, etc..)
        // You can obviously append more scopes to allow access to more services,
        // other than Google Drive.
        GIDSignIn.sharedInstance().scopes.append(kGTLAuthScopeDrive)
    
        return true
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在您AppDelegate(或其他一些可访问的地方),添加:

    var myAuth: GTMFetcherAuthorizationProtocol? = nil
    
    Run Code Online (Sandbox Code Playgroud)
  4. signIn委托函数中(假设此处也设置了AppDelegate),添加以下代码:

    func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) {
        if (error == nil) {
            // Logged into google services successfully! 
            // Save relevant details from user.authentication to refresh the token when needed.      
    
            // Set GTMOAuth2Authentication authoriser for your Google Drive service
            myAuth = user.authentication.fetcherAuthorizer()
        } else {
            // Error signing into Google services
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 最后,无论您在何处设置GoogleServiceDrive,您都可以设置其授权人,只需设置:

    let service = GTLServiceDrive()
    service.authorizer = (UIApplication.sharedApplication().delegate as! AppDelegate).myAuth
    
    Run Code Online (Sandbox Code Playgroud)
  6. 现在,您可以使用Google的示例代码

    if let authorizer = service.authorizer, canAuth = authorizer.canAuthorize where canAuth {
        // service is authorised and can be used for queries
    } else {
        // service is not authorised 
    }
    
    Run Code Online (Sandbox Code Playgroud)