Динамическая настройка 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 извлекает идентификатор с сервера и сохраняет его в переменной общего доступа.

Другие вопросы по тегам