开发者社区> 问答> 正文

OAuth认证 应用回调函数位置更改

大家都知道,应用在从浏览器跳回到应用时会在appdelegate中调用如下方法:

  • (BOOL)application:(UIApplication )application openURL:(NSURL )url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {
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做处理,请各位大牛不吝赐教

展开
收起
a123456678 2016-07-27 15:47:42 1863 0
1 条回答
写回答
取消 提交回答
  • 上面的答案是我昨天给出的,但是我觉的实现太不优雅,且无法完美的封装,最后我采取了另一种分装,就是自己写了个 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;
    2019-07-17 20:00:44
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载