android - 每次打开应用程序时,Firebase 都会发送 token 代码

标签 android firebase firebase-cloud-messaging

我想在打开应用程序时发送 token 代码。我不想发送新 token ,只发送相同的 token 。此代码工作正常,但仅适用于第一次。

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
@Override
public void onTokenRefresh() {
    String token = FirebaseInstanceId.getInstance().getToken();
    registerToken(token);
    Log.d("TOKEN", token);
}

private void registerToken(String token){
OkHttpClient client = new OkHttpClient();
RequestBody body = new FormBody.Builder()
        .add("token", token)
        .build();

Request request = new Request.Builder()
        .url("url")
        .post(body)
        .build();
try {
    client.newCall(request).execute();
} catch (IOException e) {
    e.printStackTrace();
}
}}

我知道 onTokenRefresh 仅在安装应用程序时启动。当我第一次、第二次、3. 4. 等打开我的应用程序时,如何将 token 发送到服务器

我尝试将此代码添加到我的 Activity 中,但应用程序未运行。给我一个错误

Unfortunately (app name) has stopped.

我已将此代码添加到 onCreate 的主要 Activity 中

String token = FirebaseInstanceId.getInstance().getToken();
registerToken(token);

在这段代码之后

private void registerToken(String token){
OkHttpClient client = new OkHttpClient();
RequestBody body = new FormBody.Builder()
        .add("token", token)
        .build();

Request request = new Request.Builder()
        .url("url")
        .post(body)
        .build();
try {
    client.newCall(request).execute();
} catch (IOException e) {
    e.printStackTrace();
}
}}

抱歉我的英语不好。

编辑:我的 MainActivity.java

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

我的 FirebaseInstanceIDService.java

public class FirebaseInstanceIDService extends FirebaseInstanceIdService {
    @Override
    public void onTokenRefresh() {
        String token = FirebaseInstanceId.getInstance().getToken();
        registerToken(token);
        Log.d("TOKEN", token);
    }
    private void registerToken(String token){
        OkHttpClient client = new OkHttpClient();
        RequestBody body = new FormBody.Builder()
                .add("Token", token)
                .build();

        Request request = new Request.Builder()
                .url("url")
                .post(body)
                .build();
        try {
            client.newCall(request).execute();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

编辑 2: 我认为这段代码在 mainactivity.java 中不起作用

Request request = new Request.Builder()
                    .url("url")
                    .post(body)
                    .build();

当我将此代码添加到 mainactivity 时,我的应用程序崩溃了。

完整代码为

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String token = FirebaseInstanceId.getInstance().getToken();
        registerToken(token);
        Log.d("TOKEN", token);
    }
    private void registerToken(String token){
        OkHttpClient client = new OkHttpClient();
        RequestBody body = new FormBody.Builder()
                .add("token", token)
                .build();

        Request request = new Request.Builder()
                .url("url")
                .post(body)
                .build();
        try {
            client.newCall(request).execute();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

如何使用 AsyncTask 发送数据?

最佳答案

您可以随时通过调用获取 token :

FirebaseInstanceId.getInstance().getToken();

因此您可以将其放入您的 MainActivity.onCreate() 并发送。

public void onCreate(Context ctx) {
    ...
    String token = FirebaseInstanceId.getInstance().getToken();
    if (token != null) {
        registerToken(token);
    }
    ...
}
private void registerToken(String token){
    OkHttpClient client = new OkHttpClient();
    RequestBody body = new FormBody.Builder()
            .add("token", token)
            .build();

    Request request = new Request.Builder()
            .url("url")
            .post(body)
            .build();
    try {
        client.newCall(request).execute();
    } catch (IOException e) {
        e.printStackTrace();
    }

}}

当您第一次启动应用程序时, token 在 Activity 启动时尚未生成。出于这个原因,您需要检查 null 并且还在服务中实现 onTokenRefresh

关于android - 每次打开应用程序时,Firebase 都会发送 token 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40645941/

相关文章:

android - Android Studio:Gradle项目同步失败。基本功能将无法正常工作

android - "The signing configuration should be specified in Gradle build scripts"...我做到了

firebase - Google 跟踪代码管理器可以在没有 GMS 的设备上运行吗?

ios - 我正在尝试创建自定义 firebase 数据库类,但不断出现错误

java - Firebase Messaging 仅适用于单独的设备

java - 在 Canvas 顶部绘制多行文本

android - 在 react-native 中更改为 androidX

ios - Swift - 如何将复杂对象写入 Firebase 实时数据库

android - 如何将多个 project_number/sender id 放入 google-services.json

node.js - 用户在云函数中订阅主题时出现 400 Bad Request 错误