ios微信登录不上服务器,iOS微信授权登录

本文介绍了如何集成微信SDK实现iOS应用的微信登录功能,包括获取AuthorizationCode、AccessToken和UnionId的步骤。强调了AppSecret和AccessToken的安全存储,建议将敏感信息放在服务端处理。同时提醒开发者在用户未安装微信时隐藏登录按钮,以符合审核要求。
摘要由CSDN通过智能技术生成

首先需要确保你的App应用在微信开发平台上注册创建并获得对应的接口,对应登录、支付等功能还涉及付费,具体申请流程就不再这里说了。到开放平台->管理中心->移动应用->查看应用,确认你的应用已获得微信登录接口(很多小伙伴注册账号完成后就开始使用微信登录和支付,其实这些功能是需要另外申请开通的),应用审核通过后,平台会给我们两个字符串,分别为AppID和AppSecret,把它们记下备用。

接下来就是接入SDK,到开发平台->资源中心->资源下载中,找到iOS资源下载,里面提供了两套工具包,其中一套不包含支付功能。

微信授权登录功能是使用的OAuth2.0协议,适用于拥有服务端的应用授权

在开始开发前,建议先仔细阅读该协议的几种认证模式中的Authorization Code认证,对后续流程理解上会有很大的帮助

Authorization Code认证模式大概流程如下:

第三方APP发起微信授权登录请求,用户允许授权后会返回应用并带上授权的临时数据也就是“code”参数(前端实现);

服务端通过code加上AppID和AppSecret等参数,通过API换取access_token(建议服务端实现);

通过access_token进行接口调用,获取微信用户的基本数据资源(建议服务端实现)。

微信在官方文档中给出风险说明:

1、AppSecret 是应用接口使用密钥,泄漏后将可能导致应用数据泄漏、应用的用户数据泄漏等高风险后果;存储在客户端,极有可能被恶意窃取(如反编译获取Appsecret);

2、AccessToken 为用户授权第三方应用发起接口调用的凭证(相当于用户登录态),存储在客户端,可能出现恶意获取AccessToken 后导致的用户数据泄漏、用户微信相关接口功能被恶意发起等行为;

3、refresh_token 为用户授权第三方应用的长效凭证,仅用于刷新AccessToken,但泄漏后相当于AccessToken泄漏,风险同上。

因此,强烈建议将AppSecret放在服务端,并由服务器来完成后续步骤

废话说的有点多了,下面直接看代码:

第一步:请求Authorization Code

原生应用集成微信SDK,并发起授权登录请求

- (void)sendWXAuthReq{

if([WXApi isWXAppInstalled]){//判断用户是否已安装微信App

SendAuthReq *req = [[SendAuthReq alloc] init];

req.state = @"wx_oauth_authorization_state";//用于保持请求和回调的状态,授权请求会原样带回

req.scope = @"snsapi_userinfo";//授权作用域:获取用户个人信息

[WXApi sendReq:req];//发起微信授权请求

}else{

//提示:未安装微信应用或版本过低

}

}

在回调函数中获取code

- (void)onResp:(id)resp{

if([resp isKindOfClass:[SendAuthResp class]]){//判断是否为授权登录类

SendAuthResp *req = (SendAuthResp *)resp;

if([req.state isEqualToString:@"wx_oauth_authorization_state"]){//微信授权成功

req.code //获得code

}

}

}

第二步:通过Authorization Code请求Access Token

拿到Authorization Code之后,获取Access Token,发送GET请求到下面这个URL

返回说明:

{

"access_token":"ACCESS_TOKEN", //接口调用凭证

"expires_in":7200, //access_token接口调用凭证超时时间,单位(秒)

"refresh_token":"REFRESH_TOKEN", //用户刷新access_token

"openid":"OPENID", //授权用户唯一标识

"scope":"SCOPE" //用户授权的作用域,使用逗号(,)分隔

}

第三步:通过Access Token请求Union Id

拿到Access Token和OpenID后,获取用户个人信息,发送GET请求到下面这个URL:

返回说明:

{

"openid":"OPENID", //用户的标识,对当前开发者帐号唯一

"nickname":"NICKNAME", //用户昵称

"sex":1, //用户性别,1为男性,2为女性

"province":"PROVINCE", //用户个人资料填写的省份

"city":"CITY", //用户个人资料填写的城市

"country":"COUNTRY", //国家,如中国为CN

"headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0", //用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空

"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"

}

UnionID(用户统一标识)针对一个微信开放平台帐号下的所有应用,同一用户的UnionID是唯一的,如果需要做账号第三方登录绑定业务逻辑,就用这个字段

这里强烈建议开发小伙伴区分集成微信、腾讯、微博SDK,不要使用类似友盟,通常情况下做社会化分享等确实需要用到这三样,但是问题来了,如果其中某个更新了SDK而友盟没有同步导致一些问题,那就废了

由于移动应用上微信登录只提供了原生的登录方式,必须配合微信客户端才能正常使用。所以对iOS应用而言考虑到审核指南中的相关规定,建议在接入SDK时调用WXApi中isWXAppInstalled函数来检测当前用户手机是否已安装微信客户端,对未安装的用户隐藏对应微信登录按钮,防止审核被拒绝。

如果本文对你有所帮助记得点个赞哈:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值