iOS微信授权登录集成

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白名单

集成

集成的代码可参考官方的Demo,官方的Demo将API进行了进一步的封装

1.要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的id

AppDelegatedidFinishLaunchingWithOptions 函数中向微信注册id

//向微信注册
[WXApi registerApp:@"wxd930ea5d5a258f4f" enableMTA:YES];

2.重写AppDelegatehandleOpenURLopenURL方法

官方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]];
}

这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;

表示都已废弃,并且推荐使用如下的方法,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

当用户通过其它应用启动本应用时,会回调这个方法,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调用,可参考:

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就可以获取用户个人信息了,这是在服务端做处理的,具体可参考移动应用微信登录开发指南

其它

pod集成微信先关可以参考:YTThirdPlatformManager

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值