需要:
注册微信开放平台,创建应用并提交,审核通过后,打开微信开放平台,点击管理应用,在审核通过后的应用信息页面,申请微信登录
注意点:
1.创建应用的时候,iOS需要bundle id ,安卓需要package name, 建议开发人员提供给创建应用人员,需要保证创建的应用的bundleID和项目里保持一致,不然调用微信登录授权会不成功
2.审核通过后可以拿到appid 和secret,记录下来给开发人员
3.申请开通微信登录需要开发者资质认证,开发者资质认证就是交钱,国内300元人民币,国外120美元。
4.开发不用等上面这些,可以先做sdk接入,最后换掉appid ,secret就行了
-----------------------
开发:
开发其实网上有很多教程了,各种语言版本的。不过还是没有想到作为国外不使用微信的开发来说,他们说下载的微信注册不了。。手把手教怎么接入SDK后,终于登录成功,印度小伙伴问了我一个问题,“微信信息获取到了,我们用微信的账号和密码来注册我们的应用吗”,这一瞬间我联想到facebook的信息盗取。。。我又用了很久时间和他们解释我们不能拿到微信账号的账号和密码,我们有别的方式来注册我们的应用,巴拉巴拉。。。
简易的开发流程:
1.Download the latest SDK,You can also add the [WechatOpenSDK] folder.download:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319164&token=&lang=zh_CN
2.target-link library
5.wxapi registerapp (用appid,appdelegate.m)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//regist
//5.wxapi registerapp
[WXApi registerApp:APPID];
return YES;
}
6.在点击打开微信的方法中添加调起微信客户端
if ([WXApi isWXAppInstalled]) {
//authorization,Call WeChat login
SendAuthReq *request = [[SendAuthReq alloc]init];
request.state = @"App";
request.scope = @"snsapi_userinfo";//Obtain public information
[WXApi sendReq:request];
NSLog(@"login-->%d",[WXApi sendReq:request]);
}else{
NSLog(@"wechat not install");
}
open wechat will call this method, add
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options{
//6.Handle the data passed when WeChat starts the App via URL.
[WXApi handleOpenURL:url delegate:self];
return YES;
}
7.wechat callback,打开微信,微信会返回一个 code
//7.WeChat callback, whether login or share success or not, is to follow this method @brief send a sendReq and receive WeChat response.
- (void)onResp:(BaseResp *)resp{
NSLog(@"resp:%d",resp.errCode);
if ([resp isKindOfClass:[SendAuthResp class]]) {
SendAuthResp *rep = (SendAuthResp *)resp;
if (rep.errCode == 0) {
//success
[self wxlogin:rep.code];
}
}
}
8.把code,appid,secret拿去请求得到access_token,refresh_token,openid
[manager GET:[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",URL_APPID,URL_SECRET,code] parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //获得access_token,然后根据access_token获取用户信息请求。Get the user information request.
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
NSLog(@"dic %@",dic);
/*
access_token 接口调用凭证Interface call certificate
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 授权用户唯一标识The unique identity of the authorized user.
scope 用户授权的作用域,使用逗号(,)分隔User authorization scope.
unionid 当且仅当该移动应用已获得该用户的userinfo授权时,才会出现该字段
*/
NSString* accessToken=[dic valueForKey:@"access_token"];
NSString* openID=[dic valueForKey:@"openid"];
他们问我这样一个问题,微信登录后如何注册,如果微信登录后账号注册,退出登录后再用微信登录,怎么保证是同一个人。数据库的存储映射问题。token过期问题。
token过期及openid持久化保存方法
下面两张图辅助解释逻辑流
9.使用上一步得到的access_token ,openid来请求获取用户信息
[manager GET:[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@",token,openID] parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSDictionary *dic = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
NSLog(@"dic ==== %@",dic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error %ld",(long)error.code);
}];
获取到的用户信息有:city; country; privileage; language; headimgurl; unionid; nickname; sex
当然不会拿到微信的登录账号和密码。。
第三方登录中文博客
RN的做法:
GitHub
http://www.lcode.org/超详细react-native实现微信好友朋友圈分享功能-androidios双平台/