我正在尝试通过从服务器获取项目发送者 ID 来动态设置项目发送者 ID,但它抛出了无效的发件人 id 异常。我正在从基本应用程序类中的服务器获取发件人 ID,以确保在应用程序启动之前获得它,并且我还覆盖了 GCMIntentService 中的 getSenderIds() 方法。
public GCMIntentService() {
super();
}
@Override
protected String[] getSenderIds(Context context) {
String[] ids = new String[1];
ids[0] = SENDER_ID;
return ids;
}
但是我收到无效的发件人 ID 异常。如果有人能就如何从服务器动态设置发件人 ID 给我一个明智的意见,我将不胜感激。
我设法自己做。我会试着解释一下。所以,首先我像这样编辑了getSenderIds()方法:
@Override
protected String[] getSenderIds(Context context) {
updateSenderIdTask(context);
String[] ids = new String[1];
ids[0] = getSenderId(context);
return ids;
}
以前,我将 ids[0] 设置为一个变量SENDER_ID,我将在 updateSenderIdTask 方法中设置该变量。抛出无效的发件人 id 异常是因为 GCM 会在执行 updateSenderIdTask 方法之前访问SENDER_ID变量,即使我在基应用程序类中调用了它。因此,我在getSenderIds覆盖的方法中调用了updateSenderTask,以确保在GCM使用它之前从服务器获取id。为了仔细检查它,我将 ids[0] 设置为本地方法 getSenderId。这是它的实现:
static String getSenderId(Context context) {
CustomSharedPrefs prefs = CustomSharedPrefs.getInstance(context);
if (prefs.getString(Constants.SENDER_ID).equals("0")
|| prefs.getString(Constants.SENDER_ID) == null) {
updateSenderIdTask(context);
}
Log.e("returned sender_id", prefs.getString(Constants.SENDER_ID));
return prefs.getString(Constants.SENDER_ID);
}
updateSenderIdTask 方法从服务器获取 id,并将其存储在共享首选项变量中。