我想在打开应用时发送令牌代码。我不想发送新令牌,只有相同的令牌。此代码工作正常,但仅限第一次。
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.等等时,如何将令牌发送到服务器。
我尝试将此代码添加到我的活动中但应用程序未运行。给我一个错误
不幸的是(应用名称)已停止。
我已将此代码添加到onCreate
中的主要活动中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();
}
}}
Sory因为我的英语不好。
编辑:我的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发送数据?
答案 0 :(得分:2)
您可以随时致电:
获取令牌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();
}
}}
首次启动应用程序时,活动开始时尚未生成令牌。因此,您需要检查null
和是否也在服务中实施onTokenRefresh
。
答案 1 :(得分:1)
我建议你在你的FirebaseInstaceIdService 中制作一个自定义方法,如下所示:
public class FirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = FirebaseInstanceIDService.class.getSimpleName();
private static String fcmToken;
public static String getToken() {
fcmToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Old token: " + fcmToken);
return fcmToken;
}
}
现在,在 mainActivity 的 onCreate 中调用该方法并在每个应用上检索令牌,如下所示:
FirebaseInstanceIdService.getToken();
请告诉我这是否可以帮助您实现您想要的目标。
答案 2 :(得分:0)
试试这个,
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
@Override
public void onTokenRefresh() {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
sendRegistrationToServer(refreshedToken);
}
private void sendRegistrationToServer(String token) {
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("myprefs", MODE_PRIVATE);
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.putString("token", token);
edit.commit();
}
}
现在您可以将MainActivity onCreate方法中的令牌发送到服务器
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences sharedpreferences = getApplicationContext().getSharedPreferences("myprefs", MODE_PRIVATE);
String token = sharedpreferences.getString("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();
}
}
}
现在,每当令牌通过firebase更改时,它也会在共享首选项中自动更改