2016-03-24 8 views
0

私は、データベースとしてFirebaseを使用し、通知をプッシュするためにバッチを使用するAndroidでアプリを作成しています。通常、私のアプリケーションが起動すると、メインページのログインアクティビティに移動します。Firebaseログアウトバッチプッシュ

Firebase dbRef = new Firebase(Constants.URL_DB); 
AuthData auth = dbRef.getAuth(); 

if (auth != null) // Proceed with a logged in user 
else // Show authentication layout 

私の問題は、私は、バッチからの通知を得るとき、私はアプリに行くために、通知をクリックしてくださいということですが、その後、私は私としてログインしていないです:ユーザーは、まだ使用してログインしている場合の活動を検証します... auth == nullである必要があります。バッチからのプッシュを得るたびにユーザーがログインする必要はありません。アプリが通知から開始したことを検出できますか?どのように私はFirebaseからの認証を失うのですか?ここで

はMainActivityののonCreateとonResumeです:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Initiating Batch 
    Batch.onStart(this); 

    // Initiating layout 
    setContentView(R.layout.login); 

    // Setting database 
    Firebase.setAndroidContext(this); 

    // Unrelated stuff done here (Setting Views, etc) 
} 

@Override 
protected void onResume() { 
    super.onResume(); 

    // Getting login information from previous authentication. 
    Firebase dbRef = new Firebase(Constants.URL_DB); 
    AuthData auth = dbRef.getAuth(); 

    // I added the addAuthStateListener here 

    if (auth != null) { 
     goToHomePage(); 
    } 
} 
+0

ええと...珍しいですね。あなたはリスナーで認証を検出しようとすることができます:https://www.firebase.com/docs/android/guide/user-auth.html#section-monitoring-authentication同じことをする必要がありますが、状態が分かる前に何らかの形で 'getAuth()'を呼び出す。 –

+0

このすべてのことが起こるタイミングを推測するのに十分なコードはありません。 [参照する方法](http://stackoverflow.com/help/how-to-ask)と[mcveを作成する](http://stackoverflow.com/help/mcve)を参照してください。 – Kato

+0

authDataは 'public void私がログインしていないので、onAuthStateChanged(AuthData authData){...} ' – Sunshinator

答えて

0

私は問題を発見したすべての権利。通知をクリックすると、私のMainActivityが明らかに呼び出されます。

startActivityForResult(intent, Constants.SUCCESS);

さて、onActivityResultが正常に戻るボタンがホームページに押されたときにユーザーをログアウトするために呼び出されます。事は、ユーザーが正常にログインしたとき、私が使用して別のアクティビティを開始することです。それ以外の場合は、onResumeが呼び出され、ユーザーがログインしているので、私はまっすぐにホームページに戻るでしょう。しかし、通知をクリックすると、何らかの形でonActivityResultが呼び出されます(おそらくアクティビティスタックがゴミ箱になっているため)、ユーザはアクティビティを再開する前にログアウトします。

解決策は、ホームページのアクティビティのonBackPressedでユーザをログアウトすることです。その後、私はもうstartActivityForResultする必要はありません。

// In the home page activity 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    Firebase dbRef = new Firebase(Constants.URL_DB); 
    dbRef.unauth(); 
    finish(); 
}