教印度小伙伴怎么开发微信登录微信分享记录

需要:

注册微信开放平台,创建应用并提交,审核通过后,打开微信开放平台,点击管理应用,在审核通过后的应用信息页面,申请微信登录

注意点:

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

 
 3.target  -  Info - URL Types:add appid
 
 4.info.plist :add LSApplicationQueriesSchemes:wechat;weixin
 

 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持久化保存方法

下面两张图辅助解释逻辑流

教印度小伙伴怎么开发微信登录微信分享记录_第1张图片


教印度小伙伴怎么开发微信登录微信分享记录_第2张图片

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双平台/

你可能感兴趣的:(iOS)