java - 如何将 android 客户端注册 token 发送到 FCM 服务器?

标签 java android firebase google-cloud-messaging firebase-cloud-messaging

我想实现 android 推送通知。我用谷歌搜索,发现没有文档提供向服务器发送注册 token 的示例实现。都有空实现。有人有此方法的正确示例实现吗?

至少需要 API 文档。

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);

  }

最佳答案

首先,您需要创建扩展 FirebaseInstanceIdServiceFirebaseIDService

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);
    }

}

稍后创建扩展 Service 类的 SaveFCMTokenService

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);
     }
}

另外,不要忘记将这两个添加到 list 文件中

 <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 模型类

@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;
    }
}

关于java - 如何将 android 客户端注册 token 发送到 FCM 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46545372/

相关文章:

android - Marshmallow 中的存储权限错误

android - 当手指 move Android 时,On Touch Listener 不会释放按钮

Android 定期运行任务

swift - 如何设置firebase作为服务器并执行 strip 支付

firebase - Access-Control-Allow-Origin 请求存储文件

chrome和ie浏览器之间的java request.getQueryString()值不同

Java:从 Java 运行批处理脚本时检测用户提示

Firebase:如何构建公共(public)/私有(private)用户数据

java - 如何在 Android 上使用 HTTPS 对服务器进行 POST 调用

java - WrapperManager 无法解决错误 : Java Service Wrapper