我想在打开应用程序时发送 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/