Google Cloud API OAuth2 不适用于任何 iphone 浏览器

Google Cloud API OAuth2 doesn't work on any iphone browsers

我正在开发一个简单的仪表板,它要求用户通过 gapi 登录并授予对其 Google 日历的权限。直接来自 Calendar Quickstart 的代码在我的 Macbook Pro 和 Android 上的所有浏览器 运行 上都能完美运行,但在我的 iPhone 上的任何浏览器 运行 上几乎没有反应 12 . 我试过 Chrome、Safari 和 DuckDuckGo。

如果我在 iOS 上清除这些浏览器之一的数据,我将能够进入 Google 登录流程,但重定向就像什么都没发生一样; gapi.auth2.getAuthInstance().isSignedIn.get() returns 错误。之后,单击“授权”按钮(如果您确实未登录,应该会进入 Google 登录)基本上只是刷新页面。

我收到的唯一错误消息是以下警告(iOS 中的 Safari):

代码如下:

function initClient() {
  let phoneNumber = new URLSearchParams(window.location.search).get('number');
  if(phoneNumber !== null){
    window.localStorage.setItem('numberForNewUser', phoneNumber)
  }
  gapi.client
    .init({
      apiKey: 'API_KEY',
      clientId: 'CLIENT_ID',
      discoveryDocs: ['https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest'],
      scope: 'https://www.googleapis.com/auth/calendar',
      ux_mode: 'redirect',
    })
    .then(
      function () {
        let authInstance = gapi.auth2.getAuthInstance();
        // Listen for sign-in state changes.
        authInstance.isSignedIn.listen(updateSigninStatus);

        // Handle the initial sign-in state.
        updateSigninStatus(authInstance.isSignedIn.get());
        
        authorizeButton.onclick = handleAuthClick;
        signoutButton.onclick = handleSignoutClick;
      },
      function (error) {
        console.log(error);
      }
    )
}

let authorizeButton = document.getElementById('authorize_button');
let signoutButton = document.getElementById('signout_button');
let profileContainer = document.getElementById('profile_info')

function handleAuthClick(event) {
  gapi.auth2.getAuthInstance().signIn();
}

function handleSignoutClick(event) {
  gapi.auth2.getAuthInstance().signOut();
  document.getElementById('loggedin_container').style.display = 'none'
}

虽然四处搜索似乎没完没了,但我尝试了解决方案 like this,但无济于事。任何其他建议将不胜感激!

终于找到了this answer; redirect 对 iOS 无效,但 popup 有效。不理想,但现在已经足够好了。