2013-06-09 4 views
2

Я читаю документацию здесь: http://developer.android.com/google/gcm/gs.htmlРучка изменение регистрации идентификаторов в GCM клиенте

Смотрите этот метод:

private String getRegistrationId(Context context) { 
    final SharedPreferences prefs = getGCMPreferences(context); 
    String registrationId = prefs.getString(PROPERTY_REG_ID, ""); 
    if (registrationId.length() == 0) { 
     Log.v(TAG, "Registration not found."); 
     return ""; 
    } 
    // check if app was updated; if so, it must clear registration id to 
    // avoid a race condition if GCM sends a message 
    int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE); 
    int currentVersion = getAppVersion(context); 
    if (registeredVersion != currentVersion || isRegistrationExpired()) { 
     Log.v(TAG, "App version changed or registration expired."); 
     return ""; 
    } 
    return registrationId; 
} 

Он возвращает пустую строку, если нет идентификатора сохраняется в SharedPreferences версии программного обеспечения или приложение изменилось или срок действия учетной записи истек.

И во всех этих трех случаях вызывается метод registerBackground(). Этот метод делает HTTP-запрос на моем веб-сервере, и сервер хранит идентификатор регистрации в базе данных.

Но если это произойдет, каждое обновление версии или истечение срока регистрации приведет к созданию новой строки внутри TABLE, которая находится на моем сервере.

Есть ли способ получить, когда событие изменения идентификатора регистрации происходит на стороне клиента? Потому что, если это произойдет, я обновлю строку в ТАБЛИЦЕ.

+0

null String? пустым или нулевым? – Raptor

ответ

1

Вы можете немного изменить код, чтобы достичь желаемого.

Когда старый идентификатор регистрации, хранящийся в общих предпочтениях, истекает, храните его где-нибудь. Затем, получив новый идентификатор регистрации от Google, отправьте как старый, так и новый идентификаторы на свой сервер и обновите базу данных вместо создания новой строки.

0

Он дает nullPointerException, если идентификатор регистрации имеет значение null. Потому что вы пытаетесь получить длину. ,

if (registrationId==null) { 
     Log.v(TAG, "Registration not found."); 
     return ""; 
    } 
else 
{ 
    // try to do 
} 
} 
+0

Он никогда не может быть нулевым. Если он не существует в общих настройках, он будет содержать пустую строку. – Eran

Смежные вопросы