前言:本文使用的是MOB的ShareSDK进行的苹果登录(iOS13以上才可以使用)
下面是核心的业务逻辑处理 (首先根据uid去登录,查询到未注册就前去注册,注册成功后绑定手机号,然后登录即可)
1.获取苹果授权,使用苹果uid来进行登录,获取token进入主页面
- (void)didClickedIphoneInThirdPartyCell:(WEThirdPartyLoginCell *)cell {
[WEHUD showWaitHUD];
@weakify(self)
[[WELoginManager sharedInstance] appleLoginSuccessed:^{
[WEHUD hideHUD];
AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
appDelegate.rootView = [[WERootViewController alloc]init];
WERootViewController *rootC = appDelegate.rootView;
rootC.selectedIndex = 0;
[rootC setChildrenRefresh:YES];
[weak_self reloadLoginBtnEnabled];
[UIApplication sharedApplication].delegate.window.rootViewController = rootC;
} failed:^(NSError * _Nullable error, NSDictionary * _Nullable info) {
[WEHUD hideHUD];
if (error.code == 10112) {
WEBindTelePhoneVC *phoneC = [[WEBindTelePhoneVC alloc]init];
phoneC.delegate = self;
phoneC.info = info;
phoneC.type = 3; // 苹果登录
[self.navigationController pushViewController:phoneC animated:YES];
} else {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"苹果登录失败" message:@"请稍候重试" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *sureAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];
[alertController addAction:sureAction];
[weak_self presentViewController:alertController animated:YES completion:nil];
}
}];
}
// 苹果登录
- (void)appleLoginSuccessed:(LoginSuccessed)successed failed:(LoginFailed)failed {
[ShareSDK authorize:SSDKPlatformTypeAppleAccount settings:nil onStateChanged:^(SSDKResponseState state, SSDKUser *user, NSError *error) {
if (state == SSDKResponseStateSuccess) {
NSString *userID = @"";
if (user.credential) {
SSDKCredential *credential = user.credential;
if (credential.rawData) {
NSDictionary *authUser = credential.rawData;
if ([authUser isKindOfClass:[NSDictionary class]]) {
if ([authUser objectForKey:@"user"]) {
userID = authUser[@"user"];
}
}
}
}
NSString *resultStr = [RSA encryptString:userID publicKey:RSAPublicKey];
if ([resultStr isEqualToString:@""]) {
NSError *error = nil;
failed(error,nil);
return;
}
NSDictionary *info = @{@"uid":resultStr
};
[WEHUD showWaitHUD];
AFHTTPSessionManager *manage = [AFHTTPSessionManager manager];
[manage.requestSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];
manage.requestSerializer = [AFHTTPRequestSerializer serializer];
manage.responseSerializer = [AFHTTPResponseSerializer serializer];
manage.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json", @"text/javascript",@"text/plain", nil];
NSString *url = [NSString stringWithFormat:@"%@app/login/third-party/apple/login",HostUrl];
[manage POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
[formData appendPartWithFormData:info.jsonStringEncoded.dataValue name:@"info"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSDictionary *responseDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
[WEHUD hideHUD];
BOOL isBinded = [responseDic[@"data"][@"success"] boolValue];
if (isBinded) {
[WELoginManager sharedInstance].accessToken = responseDic[@"data"][@"data"];
[self verifyUserInfoSuccessed:successed failed:failed];
} else {
NSError *error = [NSError errorWithDomain:NSCocoaErrorDomain code:10112 userInfo:nil];
if (failed) {
failed(error,info);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[WEHUD hideHUD];
if (failed) {
failed(error, info);
}
}];
} else if (state == SSDKResponseStateCancel) {
[WEHUD showWarningHUD:@"苹果登录已取消"];
} else if (state == SSDKResponseStateFail) {
[WEHUD showWarningHUD:@"苹果登录失败"];
if (failed) {
failed(error,nil);
}
} else {
NSError *error = nil;
failed(error,nil);
}
}];
}
2.如果登录失败,就说明后台没有该用户的苹果登录记录,需要进行苹果注册
3.苹果注册,然后进行绑定手机号,绑定用户(下次进行苹果登录的时候就不需要这些了,直接进行登录就可以获取token进入主页面了)
// 苹果登录注册
- (void)registerWithIphone {
[WEHUD showWaitHUD];
AFHTTPSessionManager *manage = [AFHTTPSessionManager manager];
[manage.requestSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];
manage.requestSerializer = [AFHTTPRequestSerializer serializer];
manage.responseSerializer = [AFHTTPResponseSerializer serializer];
manage.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json", @"text/javascript",@"text/plain", nil];
NSString *url = [NSString stringWithFormat:@"%@app/login/apple/user",HostUrl];
[manage POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
[formData appendPartWithFormData:self.telephone.dataValue name:@"mobile"];
[formData appendPartWithFormData:self.info.jsonStringEncoded.dataValue name:@"info"];
[formData appendPartWithFormData:self.codeView.code.dataValue name:@"code"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSDictionary *responseDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
if ([responseDic[@"httpCode"] integerValue] == 200) {
if (![responseDic[@"data"][@"success"] boolValue]) {
if (![responseDic[@"data"][@"data"] isKindOfClass:NSNull.class]) {
@try {
NSInteger code = [responseDic[@"data"][@"data"] integerValue];
if (code == 1) {
[WEHUD showWarningHUD:@"验证码错误,请重新输入"];
} else {
[WELoginManager sharedInstance].phoneNum = self.telephone;
[self getIphoneToken];
}
} @catch (NSException *exception) {
} @finally {
}
} else {
[WEHUD showWarningHUD:@"注册失败"];
}
} else {
[WELoginManager sharedInstance].phoneNum = self.telephone;
[self getIphoneToken];
}
} else {
[WEHUD showWarningHUD:@"网络错误"];
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[WEHUD showWarningHUD:@"网络错误"];
}];
}
4.绑定成功,直接后台返回token进行登录,如果没有返回,自己再拿苹果uid,直接进行默认苹果登录即可
// 获取苹果登录token
- (void)getIphoneToken {
AFHTTPSessionManager *manage = [AFHTTPSessionManager manager];
[manage.requestSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];
manage.requestSerializer = [AFHTTPRequestSerializer serializer];
manage.responseSerializer = [AFHTTPResponseSerializer serializer];
manage.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json", @"text/javascript",@"text/plain", nil];
NSString *url = [NSString stringWithFormat:@"%@app/login/third-party/apple/login",HostUrl];
[manage POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
[formData appendPartWithFormData:self.info.jsonStringEncoded.dataValue name:@"info"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[WEHUD hideHUD];
NSDictionary *responseDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
if ([responseDic[@"httpCode"] integerValue] == 200) {
if (![responseDic[@"data"][@"success"] boolValue]) {
[WEHUD showWarningHUD:@"该帐号已存在,请更换手机号,或者选择登录"];
} else {
[WELoginManager sharedInstance].accessToken = responseDic[@"data"][@"data"];
if (self.delegate && [self.delegate respondsToSelector:@selector(thirdPartyLoginWithCodeType:)]) {
[self.delegate thirdPartyLoginWithCodeType:self.type];
}
}
} else {
[WEHUD showWarningHUD:@"网络错误"];
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[WEHUD showWarningHUD:@"网络错误"];
}];
}
网友评论