6

I am using oAuth2.0 for reading email from my Gmail account. And here is my code

 oauthswift = OAuth2Swift(
            consumerKey:    "242468529977-xxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
            consumerSecret: "GfGVl_xxxxxxxxxxmjnAX",
            authorizeUrl:   "https://accounts.google.com/o/oauth2/auth",
            accessTokenUrl: "https://accounts.google.com/o/oauth2/token",
            responseType:   "code"
        )


        oauthswift?.allowMissingStateCheck = true

        let _ = oauthswift?.authorize(
            withCallbackURL: URL(string: "urn:ietf:wg:oauth:2.0:oob")!, scope: "https://www.googleapis.com/auth/gmail.metadata", state: "",
        success: { credential, response, parameters in
            let parameters =  Dictionary<String, AnyObject>()
            // Multi-part upload
            print(credential)
            print(response)


        },
        failure: { error in
            print("ERROR: \(error.localizedDescription)")
        }
        )

but after I allow permission it is showing me this screen

enter image description here

and says 'Please copy this code and switch to application and paste it there.' but I don't know where to paste code.

halfer
  • 19,824
  • 17
  • 99
  • 186
Jitendra Modi
  • 2,344
  • 12
  • 34

2 Answers2

3

Please Update Your code with mine one and replace secret with your key.i'm using OAuthSwift library in my project. Also Don't forgot to add URL Type Schemes in your project. and Make Role as Editor

let kClientID = ""

func doOAuthGoogle(){
        let oauthswift = OAuth2Swift(
            consumerKey:    kClientID,
            consumerSecret: "",
            authorizeUrl:   "https://accounts.google.com/o/oauth2/auth",
            accessTokenUrl: "https://accounts.google.com/o/oauth2/token",
            responseType:   "code"
        )
        // For googgle the redirect_uri should match your this syntax: your.bundle.id:/oauth2Callback
        self.oauthswift = oauthswift
        oauthswift.authorizeURLHandler = getURLHandler()
        // in plist define a url schem with: your.bundle.id:
        let _ = oauthswift.authorize(
            withCallbackURL: URL(string: "com.cearsinfotech.GmailAttachements:/oauth2Callback")!, scope: "https://www.googleapis.com/auth/gmail", state: "GMAIL",
            success: { credential, response, parameters in
                //                self.showTokenAlert(name: "Gmail", credential: credential)
                print(credential.oauthToken)
                let jsonDict = try? response?.jsonObject()
                print("SUCCESS: \(jsonDict)")
                print(parameters)


                let _ = oauthswift.client.get("https://www.googleapis.com/gmail/v3/about", success: { response in
                    let jsonDict:NSDictionary = try! response.jsonObject() as! NSDictionary
                    print("SUCCESS: \(jsonDict)")

                    if let arrayMessages = jsonDict.value(forKey:"messages") as? NSArray{
                        let dict = arrayMessages[2] as! NSDictionary
                        let id = dict.value(forKey: "id") as! String

                        let _ = oauthswift.client.get("https://www.googleapis.com/gmail/v1/users/me/messages/\(id)", success: { response in
                            let jsonDict:NSDictionary = try! response.jsonObject() as! NSDictionary
                            print("SUCCESS: \(jsonDict)")

                            if let payload = jsonDict.value(forKey: "payload") as? NSDictionary
                            {
                                print(payload)



                                if let parts = payload.value(forKey: "parts") as? NSArray
                                {
                                    print(parts)
                                    let partDict = parts[0] as! NSDictionary
                                    if let body = partDict.value(forKey: "body") as? NSDictionary
                                    {
                                        print(body)
                                    }

                                }


                            }


                        }, failure: { error in
                            print(error)

                        })

                    }


                }, failure: { error in
                    print(error)

                })

        },
            failure: { error in
                print("ERROR: \(error.localizedDescription)")
                //code=4/pYAZQTq2Y5nz0g0hZSAC4wC3AuQLzdJlW6pVjjXDFHM#
        }
        )
    }

You must have to USE Handler Method

//MARK:- Get URL -

    func getURLHandler() -> OAuthSwiftURLHandlerType {
        guard let type = self.formData.data?.handlerType else {
            return OAuthSwiftOpenURLExternally.sharedInstance
        }
        switch type {
        case .external :
            return OAuthSwiftOpenURLExternally.sharedInstance
        case .`internal`:
            if internalWebViewController.parent == nil {
                self.addChildViewController(internalWebViewController)
            }
            return internalWebViewController
        case .safari:
            #if os(iOS)
                if #available(iOS 9.0, *) {
                    let handler = SafariURLHandler(viewController: self, oauthSwift: self.oauthswift!)
                    handler.presentCompletion = {
                        print("Safari presented")
                    }
                    handler.dismissCompletion = {
                        print("Safari dismissed")
                    }
                    return handler
                }
            #endif
            return OAuthSwiftOpenURLExternally.sharedInstance
        }


    }
Himanshu Moradiya
  • 4,769
  • 4
  • 25
  • 49
0

Go to authorization.py (path: .../python2.7/site-packages/pygsheets/authorization.py)

Currently, the code = input('Enter the authorization code:')

change to

code = 'the code shown in the google page which ask you to copy'

enter image description here

enter image description here

Luke
  • 15
  • 2
  • 7