Edw*_*ter 6 ios instagram swift swift3 oauth2
IG似乎有很多变化.许多OAuth2 repos,似乎都有bug,或者真的不容易转换为Swift3.想知道是否有人有解决方案转移到Swift3并在Instagram上使用最新的变化?
解决方案最受欢 OAuth2实现似乎是一个更复杂的事情.令人惊讶的是,IG没有提供他们自己的示例文档,介绍如何使用iOS.他们只有基于Web的解决方案的文档.
也许在那里酿造的东西?他们有员工数以万计的编码员.但就目前而言,寻找一个(我敢说?)简单的解决方案.
太感谢了.:-)
Dav*_*eek 13
对于Swift 3:
更新:2017年4月17日:由于依赖关系破坏,Pods的安装不再有效.因此,我已经翻录了所需的内容,并使用桥接头创建了一个新的Github项目,并将所有需要的文件存储在项目中.如果您克隆或下载github项目,您将立即登录到Instagram.
要在项目中使用这些文件,只需将SimpleAuth文件夹中的所有文件拖放到项目中,确保标记 copy item if needed
您还需要Disable implicit oAuth在Instagram开发人员控制台中禁用.
然后,您将我的代码从桥接头复制/粘贴到您或您使用我的代码中.在Target的Build Settings中设置Bridging Header.
其他一切都和以前一样:
我有Instagram帐户的结构:
struct InstagramUser {
var token: String = ""
var uid: String = ""
var bio: String = ""
var followed_by: String = ""
var follows: String = ""
var media: String = ""
var username: String = ""
var image: String = ""
}
Run Code Online (Sandbox Code Playgroud)
接收令牌的功能:
typealias JSONDictionary = [String:Any]
var user: InstagramUser?
let INSTAGRAM_CLIENT_ID = "16ee14XXXXXXXXXXXXXXXXXXXXXXXXX"
let INSTAGRAM_REDIRECT_URI = "http://www.davidseek.com/just_a_made_up_dummy_url" //just important, that it matches your developer account uri at Instagram
extension ViewController {
func connectInstagram() {
let auth: NSMutableDictionary = ["client_id": INSTAGRAM_CLIENT_ID,
SimpleAuthRedirectURIKey: INSTAGRAM_REDIRECT_URI]
SimpleAuth.configuration()["instagram"] = auth
SimpleAuth.authorize("instagram", options: [:]) { (result: Any?, error: Error?) -> Void in
if let result = result as? JSONDictionary {
var token = ""
var uid = ""
var bio = ""
var followed_by = ""
var follows = ""
var media = ""
var username = ""
var image = ""
token = (result["credentials"] as! JSONDictionary)["token"] as! String
uid = result["uid"] as! String
if let extra = result["extra"] as? JSONDictionary,
let rawInfo = extra ["raw_info"] as? JSONDictionary,
let data = rawInfo["data"] as? JSONDictionary {
bio = data["bio"] as! String
if let counts = data["counts"] as? JSONDictionary {
followed_by = String(describing: counts["followed_by"]!)
follows = String(describing: counts["follows"]!)
media = String(describing: counts["media"]!)
}
}
if let userInfo = result["user_info"] as? JSONDictionary {
username = userInfo["username"] as! String
image = userInfo["image"] as! String
}
self.user = InstagramUser(token: token, uid: uid, bio: bio, followed_by: followed_by, follows: follows, media: media, username: username, image: image)
} else {
// this handles if user aborts or the API has a problem like server issue
let alert = UIAlertController(title: "Error!", message: nil, preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
if error != nil {
print("Error during SimpleAuth.authorize: \(error)")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Instagram还说:
重要
即使我们的访问令牌没有指定过期时间,您的应用程序也应该处理用户撤销访问权限或Instagram在一段时间后使令牌过期的情况.如果令牌不再有效,则API响应将包含"error_type = OAuthAccessTokenException".在这种情况下,您需要重新验证用户以获取新的有效令牌.换句话说:不要假设您的access_token永远有效.
所以处理接收的情况 OAuthAccessTokenException
| 归档时间: |
|
| 查看次数: |
7722 次 |
| 最近记录: |