使用FlickrKit for iOS进行身份验证

时间:2015-03-17 07:12:25

标签: ios oauth flickr

我正在使用FlickrKit尝试登录我的iOS(iPhone 5模拟器)的Flickr帐户。

A)我为[[FlickrKit sharedFlickrKit] initializeWithAPIKey指定了以下内容:] - Flickr键 - Flickr秘密

B)然后我打电话给[[FlickrKit sharedFlickrKit] beginAuthWithCallbackURL:] - 回调URL为@“MyTestApp:// auth”。 - “MyTestApp”在URL类型下定义 - >项目0 - >网址方案 - >第0项。

C)不幸的是,在登录过程中,当我尝试使用FlickrKit for iOS登录时出现此错误。

  

“外部应用程序要求链接到您的Flickr帐户,但是   没有包括所有必要的信息。具体做法是:“

(然后我看到一个黑条,所以我不知道具体的错误是什么)。

见下面的截图:

enter image description here

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

你是否必须按下"好的,我是LL授权它"按钮两次,这个黑条第二次出现?

我相信正在发生的事情是你选择"授权"按钮,然后将回调发送到您的应用程序,但当您再次选择该按钮时,Flickr认为您正在尝试使用重复的身份验证令牌而不允许它。

作为快速检查,请在您的app delegate中实现此方法: - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

然后在那里抛出一个NSLog来查看传递的url是什么。您可能会获得您正在寻找的数据。

我今天早些时候遇到了这个问题而且非常沮丧。

答案 1 :(得分:0)

因此,对于最新版本的swift,我必须执行以下操作:

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

我的plist还需要以下内容:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>my.bundle.id</string>
            <string>oauth-swift</string>
        </array>
        <key>CFBundleURLName</key>
        <string></string>
    </dict>
</array>

但那是因为我使用了以下库:https://github.com/dongri/OAuthSwift

答案 2 :(得分:0)

这是迟了一年。我能够通过确保所有info.plist配置良好(使用正确的方案。以前的开发删除它。但是,它工作得很好。)以及我override来使其工作。我的AppDelegate课程中的一个函数。 func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool并做了这个

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    print("DictionaryScheme: ", url.scheme!)
    if url.scheme == "schemename" {
        NotificationCenter.default.post(name: Notification.Name(rawValue: "UserAuthCallbackNotification"), object: url)
        return true
    }
    return false
}