Well, the way I use with FCM is putting MainActivity in:
if (FirebaseInstanceId.getInstance().getToken()== null)
{
FirebaseMessaging.getInstance().subscribeToTopic("news");
}
And then in the class that extends FirebaseInstanceIdService
the following:
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
// [START refresh_token]
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
new regInServer().execute(refreshedToken);
}
// [END refresh_token]
Also, do not forget to include the services in the Manifest:
<service android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
And I do not know if I forgot something, but I hope you're worth it.