当有个别用户的新数据时,我目前正在使用FCM触发SyncAdapter。
新用户登录应用后,我会使用AccountManager创建一个新帐户,并存储他们的auth_token,以便能够将其用于将来对服务器的API调用。
现在我需要向服务器发送不仅由Firebase创建的instanceID,还要向用户auth_token发送。这样做,我就可以在服务器上链接它们了。
这就是我想要做的事情:
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = MyFirebaseInstanceIDService.class.getSimpleName();
@Override
public void onTokenRefresh() {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
sendTokenToServer(refreshedToken);
}
public void sendTokenToServer(String token) {
AccountManager accountManager = AccountManager.get(getBaseContext());
Account[] accounts = accountManager.getAccountsByType(Constants.ACCOUNT_TYPE);
// ...
}
}
这里的问题是getBaseContext()
是null
。鉴于此,您如何认为我可以在此处获取帐户信息?
答案 0 :(得分:0)
嗯,实际上这个问题与从FirebaseInstanceIdService访问上下文无关,而是与我最初如何实例化我的对象有关。
成功登录后,我创建了一个异步任务,将设备实例ID发送到服务器:
new SendInstanceIDTask().execute(FirebaseInstanceId.getInstance().getToken());
这样做,我无法访问上下文。改变我的异步任务,如下所示,我可以使一切按预期工作:
private class SendInstanceIDTask extends AsyncTask<String, Void, Void> {
private Context context;
public SendInstanceIDTask(Context context) {
this.context = context;
}
@Override
protected Void doInBackground(String... params) {
MyFirebaseInstanceIDService firebaseService = new MyFirebaseInstanceIDService();
firebaseService.sendTokenToServer(context, params[0]);
return null;
}
}