今天正好需要集成支付宝登录,(注意哦,不是使用支付宝支付,只是支付宝登录。)也有一段时间没写了,正好整理下思路。把过程记录下以后直接参考。
支付宝【登录Only】AFAuthSDK下载入口.
参考官方文档
1、开发者网站申请与配置
和大多数的三方一样,需要申请成为开发者-注册app-生成appID等。
申请app
主要是appID和配置你需要用支付宝的哪些功能。这里我选择了
· 获取会员信息
· 第三方授权1
配置好需要的功能
配置好后提交审核即可。这里暂时用不到支付宝给我们提供的沙盒模式,那个用于支付功能测试不错的。
2、回到项目
将下载好的sdk拖入工程中。并配置项目的Link Binary如图:
登录:“AFAuthSDK.framework”
登录+支付:“AlipaySDK.framework”
按需集成,这里说明一点。以前由于上架审核的机制问题,所以都是AlipaySDK,但是Apple自从2018年1月左右审核机制对于支付功能的规范后,导致很多app上架失败。针对这个问题,微信、支付宝等三方登录均将授权登录部分单独提供sdk(auth_login_only)。
Link Binary
3、别急,到代码了
· import <AFAuthSDK/AFAuthSDK.h>
//你在info中/或plist中设置的appScheme
NSString *appScheme = @"你的appScheme";
//authStr参数后台获取!和开发中心配置的app有关系,包含appid\name等等信息。
NSString *authStr = @"后台获取的authStr";
//没有安装支付宝客户端的跳到网页授权时会在这个方法里回调
[[AFAuthSDK defaultService] authv2WithInfo:authStr fromScheme:appScheme callback:^(NSDictionary *result) {
// 解析 auth code
NSString *resultString = result[@"result"];
NSString *authCode = nil;
if (resultString.length>0) {
NSArray *resultArr = [resultString componentsSeparatedByString:@"&"];
for (NSString *subResult in resultArr) {
if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
authCode = [subResult substringFromIndex:10];
break;
}
}
}
NSLog(@"resultString = %@",resultString);
// NSLog(@"authv2WithInfo授权结果 authCode = %@", authCode?:@"");
}];
4、不调用block?
写完以上代码会发现并不能回调。解决:
在你的appdelegate中继续写:
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
//授权返回码
[[AFAuthSDK defaultService]processAuthv2Result:url standbyCallback:^(NSDictionary *result) {
}];
return YES;
}
以上也是在只用到支付宝登录,不需要支付的时候最简洁的做法了把。
不用到支付功能的真的没必要使用AliPaySDK.framework.
当然,你也可以使用友盟、shareSDK等方式集成,借助于后者的不利就是多集成很多无效垃圾代码。当然,凡事阴阳,后者的便利是在于我们需要集成微信、新浪、微博、支付宝、QQ、Twitter、Facebook等一大大大大大堆的三方登录。
Tips: shareSDK对国外平台的集成比较友好,友盟SDK最近一段时间没用过不知道。
简洁且简单.
The End.