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 有效。不理想,但现在已经足够好了。
我正在开发一个简单的仪表板,它要求用户通过 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 有效。不理想,但现在已经足够好了。