Reputation: 157
I am new to firebase, I have a login screen. Post successful login, i would like to invoke the getToken method cause along with the Token i am also saving User loginid in centralised server. Hence after login i am calling these two lines.
FirebaseMessaging.getInstance().subscribeToTopic("test");
FirebaseInstanceId.getInstance().getToken();
My services is as follows
public class FirebaseInstanceIDService extends FirebaseInstanceIdService {
public static String busid;
@Override
public void onTokenRefresh() {
String token = FirebaseInstanceId.getInstance().getToken();
registerToken(token);
}
private void registerToken(String token) {
OkHttpClient client = new OkHttpClient();
business_login_id=Lib.GetPref(FirebaseInstanceIDService.this, "KEY_USER_ID", "");
RequestBody body = new FormBody.Builder()
.add("token",token)
.add("business_login_id", business_login_id)
.build();
Lib.Debug("Calling URL with body "+body.toString());
Request request = new Request.Builder()
.url("http://mywebsite.com/gcm/register.php")
.post(body)
.build();
try {
client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
}
}
My question is : Why Service FirebaseInstanceIDService is executing irrespective of Post Login screen and creating the Token id instantly for the app (in my case business_login_id is null).
At this time my user id is not logged in yet. Is there any way to control exactly POST login with the right credential create the Token NOW?
Upvotes: 0
Views: 466
Reputation: 1709
For Firebase no need to check more references. Just go through this sample code and it's 100% working.
https://github.com/firebase/quickstart-android
Upvotes: 0
Reputation: 598837
A FirebaseInstanceIdService
is automatically started when you app is first installed. It does not wait until the user is signed in, nor does it have to: the token can be gotten without the user being signed in.
But it is often the case that you cannot save the token (e.g. to a hosted database) until the user is authenticated. So you'll need to either hang on to the token somewhere in the app OR request the token later.
You can store the token in Shared Preferences until you app is ready to consume it:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("token", token);
editor.commit();
And then once the user signs in:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
String token = sharedPref.getInt(token, null);
registerToken(token);
Firebase Cloud Messaging will generate a token as soon as the app is installed. So it is very likely that by the time your user signs in, the token has long been generated. In that case, you can also simply request the token after the user has signed in.
If you'd be using Firebase Authentication, that'd be something like:
FirebaseAuth.getInstance().addAuthStateListener(new FirebaseAuth.AuthStateListener() {
public void onAuthStateChanged(FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
String token = FirebaseInstanceId.getInstance().getToken();
registerToken(token);
}
}
};
Upvotes: 2