Динамическая настройка SENDER_ID в GCM
Я пытаюсь установить идентификатор отправителя проекта динамически, получая его с сервера, но он выдает исключение недопустимого идентификатора отправителя. Я получаю идентификатор отправителя с сервера в базовом классе приложения, чтобы убедиться, что я получаю его до запуска приложения, и я также переопределил метод getSenderIds() в GCMIntentService.
public GCMIntentService() {
super();
}
@Override
protected String[] getSenderIds(Context context) {
String[] ids = new String[1];
ids[0] = SENDER_ID;
return ids;
}
Но я получаю исключение недопустимого идентификатора отправителя. Я был бы очень признателен, если бы кто-нибудь мог дать мне обоснованное мнение о том, как динамически установить идентификатор отправителя с сервера.
1 ответ
Хорошо, мне удалось сделать это самостоятельно. Я постараюсь объяснить это. Итак, сначала я отредактировал метод getSenderIds() следующим образом:
@Override
protected String[] getSenderIds(Context context) {
updateSenderIdTask(context);
String[] ids = new String[1];
ids[0] = getSenderId(context);
return ids;
}
Ранее я установил для идентификаторов [0] переменную SENDER_ID, которую я установил бы внутри метода updateSenderIdTask. Возникло недопустимое исключение идентификатора отправителя, потому что GCM получит доступ к переменной SENDER_ID, прежде чем будет запущен метод updateSenderIdTask, даже если я вызвал его в базовом классе приложения. Итак, я вызвал updateSenderTask внутри переопределенного метода getSenderIds, чтобы убедиться, что я получаю идентификатор с сервера, прежде чем GCM его использует. Чтобы проверить это дважды, я установил для идентификаторов [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 извлекает идентификатор с сервера и сохраняет его в переменной общего доступа.