title: FCM demo cannot get token
body: <p>I created a project on Firebase console. I had register the package on the Firebase console, But I can`t get any token from the log even hit the LOG TOKEN button in the app.</p>
  
  <p>Then I try to send message with Firebase console and set to target to my app package name.I didn't get any incoming message from the log.</p>
  
  <p><img src="https://i.stack.imgur.com/mWIqV.jpg" alt="enter image description here"></p>
  
  <p>Code:</p>
  
  <p>MainActivity.java</p>
  
  <pre><code>public class MainActivity extends AppCompatActivity {
  
  private final String TAG = "HelloJni";
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
  
      Intent intent = new Intent(this, RegistrationIntentService.class);
      startService(intent);
  
      // Example of a call to a native method
      TextView tv = (TextView) findViewById(R.id.sample_text);
      tv.setText(stringFromJNI());
       if (getIntent().getExtras() != null) {
          for (String key : getIntent().getExtras().keySet()) {
              Object value = getIntent().getExtras().get(key);
              Log.d(TAG, "Key: " + key + " Value: " + value);
          }
      }
      // [END handle_data_extras]
  
      Button subscribeButton = (Button) findViewById(R.id.subscribeButton);
      subscribeButton.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              // [START subscribe_topics]
              FirebaseMessaging.getInstance().subscribeToTopic("news");
              // [END subscribe_topics]
  
              // Log and toast
              String msg = getString(R.string.msg_subscribed);
              Log.d(TAG, msg + ",  " + FirebaseInstanceId.getInstance().getToken());
              Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
          }
      });
  }
  </code></pre>
  
  <p>RegistrationIntentService.java</p>
  
  <pre><code>public class RegistrationIntentService extends IntentService {
  private static final String TAG = "RegIntentService";
  
  public RegistrationIntentService() {
      super(TAG);
  }
  
  @Override
  protected void onHandleIntent(Intent intent) {
      String token = FirebaseInstanceId.getInstance().getToken();
      Log.i(TAG, "FCM Registration Token: " + token);
  }
  }
  </code></pre>
  
  <p>MyFirebaseInstanceIDService.java</p>
  
  <pre><code>public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
  
  private static final String TAG = "MyFirebaseIIDService";
  
  @Override
  public void onCreate() {
      super.onCreate();
      Log.e(TAG, "oncreate.........");
  }
  
  /**
   * Called if InstanceID token is updated. This may occur if the security of
   * the previous token had been compromised. Note that this is called when the InstanceID token
   * is initially generated so this is where you would retrieve the token.
   */
  // [START refresh_token]
  @Override
  public void onTokenRefresh() {
      Log.e(TAG, "onTokenRefresh  call...");
      // Get updated InstanceID token.
      Intent intent = new Intent(this, RegistrationIntentService.class);
      startService(intent);
      String refreshedToken = FirebaseInstanceId.getInstance().getToken();
      Log.d(TAG, "Refreshed token: " + refreshedToken);
  
      // If you want to send messages to this application instance or
      // manage this apps subscriptions on the server side, send the
      // Instance ID token to your app server.
      sendRegistrationToServer(refreshedToken);
  }
  // [END refresh_token]
  
  /**
   * Persist token to third-party servers.
   *
   * Modify this method to associate the user's FCM InstanceID token with any server-side account
   * maintained by your application.
   *
   * @param token The new token.
   */
  private void sendRegistrationToServer(String token) {
      Log.d(TAG, "  sendRegistrationToServer  Refreshed token: " + token);
      // TODO: Implement this method to send token to your app server.
  }
  }
  </code></pre>
  
  <p>MyFirebaseMessagingService.java</p>
  
  <pre><code>public class MyFirebaseMessagingService extends FirebaseMessagingService {
  
  private static final String TAG = "MyFirebaseMsgService";
  
  @Override
  public void onCreate() {
      super.onCreate();
      Log.e(TAG, "oncreate..........");
  }
  
  /**
   * Called when message is received.
   *
   * @param remoteMessage Object representing the message received from Firebase Cloud Messaging.
   */
  // [START receive_message]
  @Override
  public void onMessageReceived(RemoteMessage remoteMessage) {
      // [START_EXCLUDE]
      // There are two types of messages data messages and notification messages. Data messages are handled
      // here in onMessageReceived whether the app is in the foreground or background. Data messages are the type
      // traditionally used with GCM. Notification messages are only received here in onMessageReceived when the app
      // is in the foreground. When the app is in the background an automatically generated notification is displayed.
      // When the user taps on the notification they are returned to the app. Messages containing both notification
      // and data payloads are treated as notification messages. The Firebase console always sends notification
      // messages. For more see: https://firebase.google.com/docs/cloud-messaging/concept-options
      // [END_EXCLUDE]
  
      // TODO(developer): Handle FCM messages here.
      Log.d(TAG, "From: " + remoteMessage.getFrom());
  
      // Check if message contains a data payload.
      if (remoteMessage.getData().size() &gt; 0) {
          Log.d(TAG, "Message data payload: " + remoteMessage.getData());
      }
  
      // Check if message contains a notification payload.
      if (remoteMessage.getNotification() != null) {
          Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
      }
  
      // Also if you intend on generating your own notifications as a result of a received FCM
      // message, here is where that should be initiated. See sendNotification method below.
  }
  // [END receive_message]
  
  /**
   * Create and show a simple notification containing the received FCM message.
   *
   * @param messageBody FCM message body received.
   */
  private void sendNotification(String messageBody) {
      Intent intent = new Intent(this, MainActivity.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
              PendingIntent.FLAG_ONE_SHOT);
  
      Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
      NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
              .setContentTitle("FCM Message")
              .setContentText(messageBody)
              .setAutoCancel(true)
              .setSound(defaultSoundUri)
              .setContentIntent(pendingIntent);
  
      NotificationManager notificationManager =
              (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
  
      notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
  }
  }
  </code></pre>
  
  <p>AndroidManifest.xml</p>
  
  <pre><code>&lt;application
  
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:theme="@style/AppTheme" &gt;
      &lt;activity android:name="com.example.hellojni.MainActivity" &gt;
          &lt;intent-filter&gt;
              &lt;action android:name="android.intent.action.MAIN" /&gt;
  
              &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
          &lt;/intent-filter&gt;
      &lt;/activity&gt;
  
      &lt;service
          android:name="MyFirebaseMessagingService"&gt;
          &lt;intent-filter&gt;
              &lt;action android:name="com.google.firebase.MESSAGING_EVENT"/&gt;
          &lt;/intent-filter&gt;
      &lt;/service&gt;
      &lt;service
          android:name="MyFirebaseInstanceIDService"&gt;
          &lt;intent-filter&gt;
              &lt;action android:name="com.google.firebase.INSTANCE_ID_EVENT"/&gt;
          &lt;/intent-filter&gt;
      &lt;/service&gt;
      &lt;service android:name="RegistrationIntentService" &gt;&lt;/service&gt;
  &lt;/application&gt;
  </code></pre>
  
  <p><img src="https://i.stack.imgur.com/hCkJH.jpg" alt="enter image description here"></p>
  
  <p><code>OnCreate()</code> for MyFirebaseInstanceIDService and MyFirebaseMessagingService was not called, and the token returns null.</p>
  
  <p>The log:</p>
  
  <pre><code>02-20 18:05:28.273 23322-23322 W/InstanceID/Rpc: Failed to resolve REGISTER intent, falling back
  
  02-20 18:05:28.273 23322-23322 W/InstanceID/Rpc: Both Google Play Services and legacy GSF package are missing
  
  02-20 18:05:28.273 23322-23322 W/InstanceID/Rpc: Failed to resolve REGISTER intent, falling back
  
  02-20 18:05:28.273 23322-23322 W/InstanceID/Rpc: Both Google Play Services and legacy GSF package are missing
  
  02-20 18:05:28.273 23322-23322 D/HelloJni: Subscribed to news topic,  null
  </code></pre>