iOS微信授权登录集成


https://blog.csdn.net/u014084081/article/details/80857200

iOS微信授权登录集成

iOS微信授权登录集成,具体的过程参考官方的文档

微信集成官方Demo地址: iOS资源下载

不错的文章:

准备工作

1.向微信注册你的应用程序id

开发者在微信开发平台,开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将获得AppID,可立即用于开发

2.下载载微信终端SDK文件

可在 iOS资源下载处下载 
SDK文件

3.添加依赖的库

  • SystemConfiguration.framework,
  • libz.dylib
  • libsqlite3.0.dylib
  • libc++.dylib
  • Security.framework
  • CoreTelephony.framework
  • CFNetwork.framework

4.添加URL Type

选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序id

URL scheme

5.添加URL Schemes白名单

在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“LSApplicationQueriesSchemes“添加weixin 
添加URL Schemes白名单

集成

在 AppDelegate 的 didFinishLaunchingWithOptions 函数中向微信注册id

//向微信注册
[WXApi registerApp:@"wxd930ea5d5a258f4f" enableMTA:YES];
1
2
2.重写AppDelegate的handleOpenURL和openURL方法

官方Demo实现的效果如下:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}
1
2
3
4
5
6
7
这2个方法在文档中是这样解释的:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url NS_DEPRECATED_IOS(2_0, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED;

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation NS_DEPRECATED_IOS(4_2, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED;
1
2
3
表示都已废弃,并且推荐使用如下的方法,iOS9.0以后有效:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options NS_AVAILABLE_IOS(9_0); // no equiv. notification. return NO if the application can't open for some reason
1
当用户通过其它应用启动本应用时,会回调这个方法,url参数是其它应用调用openURL:方法时传过来的
上面的3个方法作用其实都是一样的,只是参数不同而已,函数的返回值是BOOL官方文档的解释是:

YES if the delegate successfully handled the request or NO if the attempt to open the URL resource failed.
如果代理成功的处理了请求,则返回YES,如果打开URL资源失败了,则返回NO
对于这种URL Schemes调用,可参考:

IOS的软件之间的调用(URL Schemes)
iOS中的URL Scheme
3.向微信请求授权

官方Demo对请求进行了封装,如下:

//微信授权登录
- (void)sendAuthRequest {
[WXApiRequestHandler sendAuthRequestScope: kAuthScope
State:kAuthState
OpenID:kAuthOpenID
InViewController:self];
}

该方法其内部实现为:

+ (BOOL)sendAuthRequestScope:(NSString *)scope
State:(NSString *)state
OpenID:(NSString *)openID
InViewController:(UIViewController *)viewController {
SendAuthReq* req = [[SendAuthReq alloc] init];
req.scope = scope; // @"post_timeline,sns"
req.state = state;
req.openID = openID;

return [WXApi sendAuthReq:req
viewController:viewController
delegate:[WXApiManager sharedManager]];
}

创建了SendAuthReq对象,其:

scope - 必须,应用授权作用域,如获取用户个人信息则填写snsapi_userinfo
state - 非必须,用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验
appid - 必须,应用唯一标识,在微信开放平台提交应用审核通过后获得
参考移动应用微信登录开发指南

第三方向微信终端发送一个SendAuthReq消息结构,如[WXApi sendReq:req];,可拉起微信打开授权登录页:

微信打开授权登录页

用户点击授权后,微信客户端会被拉起,跳转至授权界面,用户在该界面点击允许或取消,SDK通过SendAuthResp返回数据给调用方

在官方的Demo中,WXApiManager中实现了WXApiDelegate- (void)onResp:(BaseResp *)resp方法和- (void)onReq:(BaseReq *)req方法

resp

在控制器中的managerDidRecvAuthResponse:方法处理响应

 

- (void)managerDidRecvAuthResponse:(SendAuthResp *)response {
NSString *strTitle = [NSString stringWithFormat:@"Auth结果"];
NSString *strMsg = [NSString stringWithFormat:@"code:%@,state:%@,errcode:%d", response.code, response.state, response.errCode];

[UIAlertView showWithTitle:strTitle message:strMsg sure:nil];
}

返回的数据,解释如下:

响应数据解释

获取到code后,就可以通过code获取access_tokenopenid,然后通过access_tokenopenid就可以获取用户个人信息了,这是在服务端做处理的,具体可参考移动应用微信登录开发指南

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM