处理SFSafariViewController中的弹出窗口/选项卡

时间:2016-09-14 18:59:50

标签: ios soundcloud sfsafariviewcontroller

我正在我的应用中实现SoundCloud登录流程。该应用会在https://soundcloud.com/connect中使用SFSafariViewController打开redirect_uri,该postMessage使用我应用的自定义网址方案来接收回复。它适用于直接的SoundCloud登录,但在尝试使用“使用Google登录”按钮时失败。

在Safari中,该按钮会打开一个带有Google登录页面的新标签(桌面弹出窗口),然后通过SFSafariViewController与SoundCloud标签进行通信。如果您使用iOS Safari应用程序,此登录流程正常,但https://accounts.google.com/o/oauth2/auth?...失败(单击该按钮会转到带有Google网址的白页:SFSafariViewController)。

现在,我的解决方法是建议使用Google的用户点击Expecting new line or semicolon上的Safari图标以完成Safari应用中的登录流程,但我想知道是否有办法处理此问题而不离开我的应用

1 个答案:

答案 0 :(得分:0)

好吧,如果我使用UIWebView,您可以在用户通过Google验证后从谷歌获取最终的oauth响应。但是,我们如何将其转回SoundCloud(例如soundcloud.com/connect/via/google_plus/returning

- (void) webViewDidFinishLoad:(UIWebView*)inWebView {

    NSString* str = [inWebView stringByEvaluatingJavaScriptFromString:@"document.getElementById('response-form-encoded').value"];
    if ( str.length > 0 ) {
        NSDictionary* params = parseURLParams( str );
        NSLog( @"%@", params );
    }
}

输出:

{
    "access_token" = "ya2...<removed>...4g";
    authuser = 0;
    code = "4/sU_g7....<removed>...fnRELA";
    "expires_in" = 3600;
    "id_token" = "eyJhb...<removed>...DA";
    prompt = none;
    scope = "https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com/auth/plus.login+https://www.googleapis.com/auth/userinfo.profile+https://www.googleapis.com/auth/plus.moments.write+https://www.googleapis.com/auth/plus.me+https://www.googleapis.com/auth/plus.profile.agerange.read+https://www.googleapis.com/auth/plus.profile.language.read+https://www.googleapis.com/auth/plus.circles.members.read";
    "session_state" = "c8703a085b885bbe8c8d0e29277b0c2fdf9c6c87..65aa";
    state = "392921654%7C0.288515904";
    "token_type" = Bearer;
}

启动Google登录步骤的网址如下 - 为方便起见,我已解码下面的网址转义编码:

    https://accounts.google.com/o/oauth2/auth?client_id=984739005367.apps.googleusercontent.com&response_type=code token id_token gsession&scope=https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.profile&state=425511939|0.2912748339&access_type=offline&request_visible_actions=http://schemas.google.com/AddActivity http://schemas.google.com/ListenActivity http://schemas.google.com/CreateActivity&after_redirect=keep_open&cookie_policy=single_host_origin&prompt=none&include_granted_scopes=true&proxy=oauth2relay751149297&redirect_uri=postmessage&origin=https://soundcloud.com&gsiwebsdk=1&authuser=0&jsh=m;/_/scs/apps-static/_/js/k=oz.gapi.en.TA32fes-0yU.O/m=__features__/am=AQ/rt=j/d=1/rs=AGLTcCOuWXPCbMjoOmrZx_gBsAG8J20NLA