【发布时间】:2016-06-28 06:52:15
【问题描述】:
如何使用 iOS SDK 进行微信授权和登录?堆栈溢出或google上似乎没有太多关于此的信息,并且大多数文档都是中文的。
【问题讨论】:
如何使用 iOS SDK 进行微信授权和登录?堆栈溢出或google上似乎没有太多关于此的信息,并且大多数文档都是中文的。
【问题讨论】:
选择在这里回答我自己的问题,因为似乎缺乏关于堆栈溢出和谷歌的信息。我希望其他人也觉得它有用。
1.) 关注 Suragch 的关于如何设置 iOS SDK 的出色回答:How to add the WeChat API to a Swift project?。确保AppDelegate
的设置与func onReq(req: BaseReq!)
和func onResp(resp: BaseResp!)
方法的实现一致。
2.) 要使登录和授权正常工作,您必须下载并使用中文版 SDK。奇怪的是,英文版中删除了一些登录所需的功能。中文SDK在这里:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319164&lang=zh_CN
3.) 首先我们要授权我们想用微信使用的应用程序。可以这样做:
let req = SendAuthReq()
req.scope = "snsapi_userinfo" //Important that this is the same
req.state = "co.company.yourapp_wx_login" //This can be any random value
WXApi.sendReq(req)
这应该返回一个代码到func onResp(resp: BaseResp!)
我实现了这样的方法 - 触发通知:
func onResp(resp: BaseResp!) {
if let authResp = resp as? SendAuthResp {
if authResp.code != nil {
let dict = ["response": authResp.code]
NSNotificationCenter.defaultCenter().postNotificationName("WeChatAuthCodeResp", object: nil, userInfo: dict)
} else {
let dict = ["response": "Fail"]
NSNotificationCenter.defaultCenter().postNotificationName("WeChatAuthCodeResp", object: nil, userInfo: dict)
}
} else {
let dict = ["response": "Fail"]
NSNotificationCenter.defaultCenter().postNotificationName("WeChatAuthCodeResp", object: nil, userInfo: dict)
}
}
4.) 使用代码,我们现在可以尝试获取 openID 和 accessToken。为此,我们需要使用appID
、appSecret
建立一个链接并执行一个HTTP GET 请求。 appID
和appSecret
是您在微信注册应用程序时获得的详细信息。像这样的例子:
private let appID = "somecode2132113"
private let appSecret = "someappsecret213123"
private let accessTokenPrefix = "https://api.weixin.qq.com/sns/oauth2/access_token?"
private func buildAccessTokenLink(withCode code: String) -> String {
return accessTokenPrefix + "appid=" + appID + "&secret=" + appSecret + "&code=" + code + "&grant_type=authorization_code"
}
通过此链接,我们可以执行 HTTP GET 请求并获取 JSON 中的 openID
和 accessToken
。 (在 Postman 中尝试)。我不会为此发布代码,但我正在使用 Alamofire。
5.) 最后我们可以更进一步,尝试获取微信用户的昵称和头像。与之前我们使用在上一步中获得的openID
和accessToken
创建新链接之前非常相似。像这样:
private let userInfoPrefix = "https://api.weixin.qq.com/sns/userinfo?"
private func buildUserInfoLink(withOpenID openID: String, accessToken: String) -> String {
return userInfoPrefix + "access_token=" + accessToken + "&openid=" + openID
}
再次,执行 HTTP GET 请求,JSON 将返回昵称和头像链接!
加:这里有详细指南:http://www.kekearif.com/how-to-implement-ios-wechat-login/
【讨论】:
我已经按照接受的答案做了所有事情,但它没有奏效,直到我改变了我的Info.plist
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
</array>
到
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
<string>weixinULAPI</string>
</array>
从官方指南here得到它
【讨论】: