2017-09-17 11 views
3

私は、認証オプションを提供するブラウザーで動作するSPAを構築しました。私はgoogle signinをクリックし、認証トークンfirebase authはAndroidデスクトップにインストールされたPWAで動作しません

これで、PWAを切り替えて通常どおりに使用できます。しかし、私がログアウトすると、Google認証を使って再びアプリケーションにログインすることはできません.AppleまたはChromeでGoogle Signinのポップアップを実行させても、確認は一切なくなり、クラッシュするようです。

この問題はGoogleログインの追加タブの読み込みと関係があります。画面上のダイアログによれば、AndroidはこのタブをPWAまたはChromeで開くかどうかを尋ねます。どんなオプションを選んでも、フローは完了しません(そして、切断のために、私はdevtoolsで有用なものを見ることができません)。

動作するように見える唯一の流れは、クロムのログインを継続し、完了したときだけAppバージョンに切り替えることです。それは私にとってはStackOverflowで書いても大丈夫ですが、私のユーザにとっては非常に複雑です。

この状況のデバッグを開始するにはどうすればいいですか: - firebase authをPWAから実行できるようにする必要があります。そして/または - ユーザーがブラウザにログインした後、ホーム画面に追加するためにAndroidのポップアップが遅れることがありますか?

これはgooglesignin関数です。通常、コード内でonAuthStateメッセージを待つため、必要なすべての情報が含まれているため、何もしません。 @jasanパー

function signinGoogle() { 
    var provider = new firebase.auth.GoogleAuthProvider(); 
    firebase.auth().signInWithPopup(provider).then(function(result) { 
     // This gives you a Google Access Token. You can use it to access the Google API. 
     var token = result.credential.accessToken; 
     // The signed-in user info. 
     var user = result.user; 
     // ... 
    }).catch(function(error) { 
     // Handle Errors here. 
     var errorCode = error.code; 
     var errorMessage = error.message; 
     // The email of the user's account used. 
     var email = error.email; 
     // The firebase.auth.AuthCredential type that was used. 
     var credential = error.credential; 
     // ... 
    }); 
} 
+1

をPWAは、たくさんのことを意味することができます。その詳細をご記入ください。 signInWithRedirectを使用してみてください。signInWithPopupには、多くのPWA環境/フレームワークで問題があります。 – bojeil

+0

@ simon-hこの問題を解決しましたか?私は同じ正確な問題を抱えていると信じています。私もあなたの質問を最初に見たことがなく、https://stackoverflow.com/questions/47122645/でも投稿しました。 – jasan

答えて

1

の要求、私は@bojeilに基づくソリューション見つけたのコメント

function signinGoogle(cb) { 
    var provider = new firebase.auth.GoogleAuthProvider(); 
    // firebase.auth().signInWithPopup(provider).then(function(result) { 
    firebase.auth().signInWithRedirect(provider).then(function(result) { 
     console.log("Google signin successful") 
     // This gives you a Google Access Token. You can use it to access the Google API. 
     // var token = result.credential.accessToken; 

     // Send user to rest of program 
     cb(token) 
    }) 
    .catch(function(error) { 
     logger(error); 
    }); 
} 
関連する問題