大家都知道,应用在从浏览器跳回到应用时会在appdelegate中调用如下方法:
NSLog(@"url = %@",url.absoluteString);
NSLog(@"sourceApplication = %@",sourceApplication);
[[MBGithubOAuthClient sharedClient] tokenRequestWithCallbackURL:url
saveOptions:kMBSaveOptionsKeychain
completion:^(BOOL success, NSError *error) {
if (error || !success) {
NSLog(@"Token request failed: %@", error.localizedDescription);
} else {
// Saved to user defaults...
NSLog(@"Saved token");
}
}];
return YES;
}
在这里我对返回的url参数可以做处理,可是业务代码不可能写在这里,我应该如何做,使得的可以将回调方法定义在任何位置,类似友盟在controller类中的如下方法:
-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
{
//根据`responseCode`得到发送结果,如果分享成功
if(response.responseCode == UMSResponseCodeSuccess)
{
//得到分享到的微博平台名
NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
}
if (response.viewControllerType == UMSViewControllerOauth) {
NSLog(@"didFinishOauthAndGetAccount response is %@",response);
}
}
当然我希望如果可以,实现如下的回调方式:
[[OAuthSignUtil sharedOAuthSignUtil] signInto:SignIntoGithub completion:^(BOOL success,NSError *error){
//做回调处理
}];
即我使用signInto:SignIntoGithub方法去获取授权,然后回调成功之时,之后在下面的block做处理,请各位大牛不吝赐教
上面的答案是我昨天给出的,但是我觉的实现太不优雅,且无法完美的封装,最后我采取了另一种分装,就是自己写了个 Delegate, 下面做出解释:
- (BOOL)application: (UIApplication *)application openURL: (NSURL *)url sourceApplication: (NSString *)sourceApplication annotation: (id)annotation {
if([url.absoluteString containsString:@"gitauth"]){
return [[MBGithubOAuthClient sharedClient] handleOpenURL:url];
}else{
return [GPPURLHandler handleURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
}
如上所示,我参考友盟提供的方法对github账号的第三方登陆进行了封装,首先在应用回调里执行了 handleOPenURL方法,此方法在 MBGithubOAuthClient 中定义如下:
- (BOOL)handleOpenURL:(NSURL *)url{
[self tokenRequestWithCallbackURL:url saveOptions:kMBSaveOptionsKeychain completion:^(BOOL success, NSError *error) {
}];
return YES;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。