私のアプリケーションは、Javascript のみを使用して Google とやり取りします。ユーザー プロファイルへのアクセス、電子メールへのアクセス、および連絡先管理のアクセス許可が求められます。ページをロードすると、アプリケーションは、ユーザーがそれらのアクセス許可を既に付与しているかどうかを確認し、付与されている場合はアクセス トークンを取得します。
サンプルコードは次のとおりです。
var GoogleContacts = {
...
checkAuth: function(){
gapi.auth.authorize({
client_id: googleKeys.clientId,
scope: googleKeys.scopes,
immediate: true
},
jQuery.proxy(this.handleAuthResult, this)
);
},
askAuth: function(){
gapi.auth.authorize({
client_id: googleKeys.clientId,
scope: googleKeys.scopes,
immediate: false
},
jQuery.proxy(this.handleAuthResult, this)
);
}
...
}
....
function handleGoogleApiLoad(){
gapi.client.setApiKey(googleKeys.apiKey);
gapi.auth.init(function(){console.info('popup api ready')});
setTimeout(function(){GoogleContacts.checkAuth();}, 300);
}
....
$('#emailButton').click(function() {
if(!accessToken)
GoogleContacts.askAuth();
...
});
これで、ユーザーが初めてアクセスした場合、「メールを送信」ボタンを押したときに正しい権限が求められます。ユーザーがページをリロードすると、シームレスなアクセス許可チェックでエラーが返され、ユーザーが「メールを送信」ボタンを押すと、Google 認証ポップアップが再び開き、オフライン アクセス許可が求められるようになりました。
JS API はオフライン アクセスを実際に使用しないため、これは正しくないようです。
この問題は、Google が増分認証機能をリリースした後に始まったようです
: http://googleplusplatform.blogspot.co.il/2013/12/google-sign-in-improvements11.html
ユーザーを奇妙な許可要求で混乱させないようにコードを変更しますか?
アップデート:
plus api とgapi.auth.signIn()
メソッドを使用しようとしましたが、同じ結果になりました。どうやら、この問題はスコープに依存しているようです。ログイン スコープのみを使用すると、すべてが期待どおりに機能しますが、Google コンタクト アクセス スコープ https:||www.google.com/m8/feeds/ を追加すると、常にオフライン アクセスが発生します。 2 回目にページに入るときに要求します。これを確認するフィドルは次のとおりです: http://jsfiddle.net/hjLM6/6/
これはバグに違いありません。ユーザーを怖がらせるので、Google にすぐに対処してもらいたいと思います。