菜鸟教程小白 发表于 2022-12-13 01:38:08

ios - 对 Google 帐户关联的操作


                                            <p><p>以下文档描述<a href="https://developers.google.com/actions/identity/oauth2-implicit-flow" rel="noreferrer noopener nofollow">here</a> ,我使用隐式授权设置了帐户链接,并发现它在使用浏览器/操作控制台以及适用于 Android 的 Google Home 应用程序进行测试时效果很好。不幸的是,在应用程序的 iphone 版本上,用户身份验证大部分时间都挂起。来自谷歌支持行动的反馈是,问题在于谷歌登录流程是在单独的浏览器选项卡(窗口)中实现的。在 iphone 上,您无法在 SfariViewController 中打开 2 个窗口,因此它们正在重写第一页的地址,无法完成登录流程。这是已知问题,他们不打算改变这一点。解决方案是在一个浏览器窗口中实现所有登录流程。我不清楚如何执行此操作,并且正在寻找某人在您设置的授权 URL 后面共享代码,该 URL 始终在 iphone 上运行。以下是我正在使用的核心:</p>

<p>.html 片段:</p>

<pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Authorization Page&lt;/title&gt;
&lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1&#34;&gt;
&lt;meta name=&#34;google-signin-client_id&#34; content=&#34;948762963734-2kbegoe3i9ieqc6vjmabh0rqqkmxxxxx.apps.googleusercontent.com&#34;&gt;
&lt;!-- &lt;meta name=&#34;google-signin-ux_mode&#34; content=&#34;redirect&#34;&gt; INCLUDING THIS META TAG BREAKS THE AUTH FLOW --&gt;
&lt;script src=&#34;js/googleAuth.js&#34;&gt;&lt;/script&gt;
&lt;script src=&#34;https://apis.google.com/js/platform.js&#34; async defer&gt;&lt;/script&gt;
&lt;link rel=&#34;stylesheet&#34; href=&#34;css/googleAuth.css&#34;&gt;   
&lt;link rel=&#34;stylesheet&#34; href=&#34;https://fonts.googleapis.com/css?family=Raleway&#34;&gt;
&lt;link rel=&#34;stylesheet&#34; href=&#34;https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css&#34;&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;header class=&#34;bgimg-1 w3-display-container w3-grayscale-min&#34; id=&#34;loginScreen&#34;&gt;
&lt;div class=&#34;w3-display-topleft w3-padding-xxlarge w3-text-yellow&#34; style=&#34;top:5px&#34;&gt;
    &lt;span class=&#34;w3-text-white&#34;&gt;Google Sign In&lt;/span&gt;&lt;br&gt;
    &lt;span class=&#34;w3-large&#34;&gt;Sign in with your Google account&lt;/span&gt;&lt;br&gt;&lt;br&gt;
    &lt;div class=&#34;g-signin2&#34; data-onsuccess=&#34;onSignIn&#34;&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;      
&lt;/div&gt;   
&lt;/header&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>.js 代码片段:</p>

<pre><code>function onSignIn(googleUser) {
var profile = googleUser.getBasicProfile();
var id = profile.getId()
var name = profile.getName()
var email = profile.getEmail()
var token = googleUser.getAuthResponse().id_token;
var client_id = getQueryVariable(&#39;client_id&#39;)
// vital-code-16xxx1 is the project ID of the google app
var redirect_uri = &#39;https://oauth-redirect.googleusercontent.com/r/vital-code-16xxx1&#39;
var state = getQueryVariable(&#39;state&#39;)
var response_type = getQueryVariable(&#39;response_type&#39;)

// store the user&#39;s name, ID and access token and then sign out
storeOwnerID (email, name, id, token, function() {
    // sign out
    var auth2 = gapi.auth2.getAuthInstance();
    auth2.signOut().then(function () {
      console.log(&#39;signed out&#39;)
    });
    // if this page was loaded by Actions On Google, redirect to complete authorization flow
    typeof redirect_uri != &#39;undefined&#39; ? window.location = redirectURL : void 0   
})
}

function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split(&#39;&amp;&#39;);
for (var i = 0; i &lt; vars.length; i++) {
    var pair = vars.split(&#39;=&#39;);
    if (decodeURIComponent(pair) == variable) {
      return decodeURIComponent(pair);
    }
}
console.log(&#39;Query variable %s not found&#39;, variable);
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>@dana 你试过添加元标记吗?</p>

<pre><code>&lt;meta name=&#34;google-signin-ux_mode&#34; content=&#34;redirect&#34;&gt;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 对 Google 帐户关联的操作,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/44311663/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/44311663/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 对 Google 帐户关联的操作