Обмен сообщениями C2DM работает на локальном сервере, но не в работе (Google App Engine) - PullRequest
2 голосов
/ 06 сентября 2011

Итак, у меня есть приложение, которое использует обмен сообщениями C2DM.Он отлично работает в режиме локального сервера, когда он размещен на моем компьютере.Однако при развертывании приложения в ядре приложения оно перестает работать!Я выдернул свои волосы и не могу понять, почему это так.

Я пытался использовать SDK для App Engine 1.5.2 и 1.5.3 и собирать плагины 2.3 и 2.4 GWT в Eclipse,Ни один из тех, кажется, не работает.Я могу просто зарегистрировать телефон, но, похоже, на телефон не приходят сообщения C2DM.

Ответы [ 2 ]

2 голосов
/ 07 сентября 2011

Хорошо, я покопался и обнаружил, что в коде, предоставленном Google, есть ошибка. На локальном сервере хранятся регистрационные данные пользователя со всеми строчными буквами (MyEmail@bomb.com -> myemail@bomb.com). На рабочем сервере он НЕ использует все строчные буквы для хранения электронной почты. Следующий метод запрашивает хранилище данных, предоставляя адрес электронной почты в качестве аргумента в нижнем регистре.

Решение, закомментируйте указанную строку или найдите способ использовать все строчные буквы при сохранении электронной почты в хранилище данных при регистрации.

/**
 * Helper function - will query all registrations for a user.
 */
@SuppressWarnings("unchecked")
public static List<DeviceInfo> getDeviceInfoForUser(String user) {
    PersistenceManager pm = PMF.get().getPersistenceManager();
    try {
        // Canonicalize user name
----->  user = user.toLowerCase(Locale.ENGLISH);
        Query query = pm.newQuery(DeviceInfo.class);
        query.setFilter("key >= '" +
                user + "' && key < '" + user + "$'");
        List<DeviceInfo> qresult = (List<DeviceInfo>) query.execute();
        // Copy to array - we need to close the query
        List<DeviceInfo> result = new ArrayList<DeviceInfo>();
        for (DeviceInfo di : qresult) {
            result.add(di);
        }
        query.closeAll();
        log.info("Return " + result.size() + " devices for user " + user);
        return result;
    } finally {
        pm.close();
    }
}
0 голосов
/ 29 июля 2014

добавить user = user.toLowerCase(Locale.ENGLISH); перед запросом, безусловно, будет работать.

...