如何在OauthSwift库中设置回调URL

时间:2015-11-18 19:11:01

标签: ios tumblr oauth-1.0a

我正在开展一个项目,我正在实施OAuthSwift库,以连接到使用OAuth1和OAuth2的几个不同的社交网站。

我已将应用程序设置为加载Web视图,该视图将我带到我的社交网站,但我无法让应用程序重定向回来。加载凭据后,它会要求我授予对应用程序进行授权的权限,但是一旦我这样做,就会加载我的社交网站主页。

我可以导航回应用程序,但它没有注册它已获得访问我的帐户的权限。

这是我第一次使用OAuth,发现回调网址令人困惑。

我很感激帮助解释如何让网页视图重定向回我的应用程序以及如何设置应用的网址。

类ViewController:UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func postToTumblr(sender: AnyObject) {
    let oauthSwift = OAuth1Swift(
        consumerKey: "consumerKey",
        consumerSecret: "secretKey",
        requestTokenUrl: "https://www.tumblr.com/oauth/request_token",
        authorizeUrl: "https://www.tumblr.com/oauth/authorize",
        accessTokenUrl: "https://www.tumblr.com/oauth/access_token"
    )

    oauthSwift.authorizeWithCallbackURL(NSURL(string: "com.myCompany.sampleApp")!,
        success: { credential, response in
            // post to Tumblr
            print("OAuth successfully authorized")
        }, failure: {(error:NSError!) -> Void in
            self.presentAlert("Error", message: error!.localizedDescription)
    })
}


func presentAlert(title: String, message: String) {
    let alert = UIAlertController(title: title, message: message, preferredStyle: .Alert)
    alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
    self.presentViewController(alert, animated: true, completion: nil)
}

}

1 个答案:

答案 0 :(得分:6)

在与我公司的一些人交谈并让他们查看图书馆后,我们能够按如下方式解决问题:

OAuthSwift库删除了URL方案的“com.myCompany”部分。当它在寻找回调URL时,它正在查找应用程序的名称,后跟“:// oauth-callback”。

所以而不是:

oauthSwift.authorizeWithCallbackURL(NSURL(string: "com.myCompany.sampleApp")!

正在寻找:

oauthSwift.authorizeWithCallbackURL(NSURL(string: "tumblrsampleapp://oauth-callback")!

我还必须在info.plist中注册URL方案:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>tumblrsampleapp</string>
        </array>
    </dict>
</array>

最后,我必须将以下方法添加到App Delegate:

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
    OAuth1Swift.handleOpenURL(url)
    return true
}

这解决了问题,现在应用程序正确验证并返回我的应用程序。

我希望这对尝试使用OAuthSwift库实现OAuth1的其他人有用。