2015-08-03-登录分享集成笔记摘要

Posted by DragonLi on August 3, 2015

##友盟第三方登录

  • 微信 应用图标需要18x18png和108x108png
  • QQ 需要16x16png和512x512png。还需要2-5张截图

OAuth2.0授权登录

  • 让XXX用户使用XXX身份安全登录第三方应用或网站,在XXX用户授权登录已接入XXXOAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行XXX开放平台授权关系接口调用,从而可实现获取XXX用户基本开放信息和帮助用户实现基础开放功能等。

2、微信授权的步骤

如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的

  • 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
  • 通过code参数加上AppID和AppSecret等,通过API换取access_token;
  • 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
-(IBAction)sendAuthRequest
{ 
    //构造SendAuthReq结构体 
    SendAuthReq* req =[[[SendAuthReq alloc ] init ] autorelease ];
    req.scope = @"snsapi_userinfo" ;
    req.state = WXPacket_State ;//用于在OnResp中判断是哪个应用向微信发起的授权,这里填写的会在OnResp里面被微信返回
    //第三方向微信终端发送一个SendAuthReq消息结构
    [WXApi sendReq:req]; 
}
//微信代理方法
- (void)onResp:(BaseResp *)resp
{

     SendAuthResp *aresp = (SendAuthResp *)resp;
     if(aresp.errCode== 0 && [aresp.state isEqualToString:WXPacket_State])
        {
            NSString *code = aresp.code;
            [self getWeiXinOpenId:code];
        }
}


//通过code获取access_token,openid,unionid
- (void)getWeiXinOpenId:(NSString *)code{
    NSString *url =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",AppId,AppSerect,code];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSURL *zoneUrl = [NSURL URLWithString:url];
        NSString *zoneStr = [NSString stringWithContentsOfURL:zoneUrl encoding:NSUTF8StringEncoding error:nil];
        NSData *data = [zoneStr dataUsingEncoding:NSUTF8StringEncoding];
        dispatch_async(dispatch_get_main_queue(), ^{
            if (data){
                NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
                NSString *openID = dic[@"openid"];
                NSString *unionid = dic[@"unionid"];
            }
        });
    });

}