How to send android client registration token to FCM server?

Viewed 5284

I want to implement android push notification . I googled and find no document provides the sample implementation of sending registration token to the server. All have the empty implementation . Any one have the correct sample implementation for this method?

At least API documentation is required.

https://firebase.google.com/docs/cloud-messaging/android/client

public void onTokenRefresh() 
{

  // Get updated InstanceID token.

    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.w(TAG, "Refreshed token: " + refreshedToken);

  // If you want to send messages to this application instance or
  // Instance ID token to your app server.

sendRegistrationToServer(refreshedToken);

  }
2 Answers

First, you need to create FirebaseIDService class that extends FirebaseInstanceIdService

public class FirebaseIDService extends FirebaseInstanceIdService {
    private static final String TAG = "FirebaseIDService";

    private SharedPreferences sharePrefs;
    private SharedPreferences.Editor edit;

    @Override
    public void onTokenRefresh() {
        // Get updated InstanceID token.
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();

        Intent intent = new Intent(FirebaseIDService.this, SaveFCMTokenService.class);
        intent.putExtra("TOKEN",refreshedToken);
        FirebaseIDService.this.startService(intent);
    }

}

Later create SaveFCMTokenService class that extends Service class

public class SaveFCMTokenService extends Service {

    @Override
    public void onCreate() {
    // TODO Auto-generated method stub
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub

        if(intent != null){

            Bundle b = intent.getExtras();

            if(b != null) {
                String token = b.getString("TOKEN");

                sendRegistrationToServer(token);
            }
        }
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
    }

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

     private void sendRegistrationToServer(final String token) {
          // Add custom implementation, as needed.

       DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
        DatabaseReference fcmDatabaseRef = ref.child("FCM_Device_Tokens").push();

         FCM_Device_Tokens obj = new FCM_Device_Tokens();
         obj.setToken(token);
         fcmDatabaseRef.setValue(obj);
     }
}

Also, don't forget to add these two into manifest file

 <service android:name=".servicesreceivers.FirebaseIDService">
                android:exported="true">
                <intent-filter>
                    <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
                </intent-filter>
            </service>
            <service android:name=".servicesreceivers.SaveFCMTokenService" />

FCM_Device_Tokens model class

@IgnoreExtraProperties
public class FCM_Device_Tokens {

    @SerializedName("token")
    private String token;

    public FCM_Device_Tokens() {
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }
}
@IgnoreExtraProperties
public class User {

    public String token;
    public String email;

    public User() {
        // Default constructor required for calls to DataSnapshot.getValue(User.class)
    }

    public User(String token, String email) {
        this.token = token;
        this.email = email;
    }

}

private DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();

// to save token in firebase db
User user = new User(token, email);
mDatabase.child("users").child("put_constant_id_here").setValue(user);
Related