Xpoint
   [напомнить пароль]

PHP + Push notifications + Кириллица

Метки: [без меток]
2012-08-20 11:44:02 [обр] Ken Fin[досье]

Добрый день!

Имеется новостной сайт. Для него пишется iphone приложение. При реализации push уведомлений на стороне сервера столкнулся с проблемой - сервер apple ожидает json объект размером < 256 байт.(размер проверяю через mb_strlen(json,'8bit'))
По плану в push уведомлении содержится заголовок новости, БД отдает текст в формате уникодной строки (\u0000 и т.п.), из-за чего в новость помещается только до 35 "кириллов", но г-н начальник уверяет, что от ВК ему приходят "большие" уведомления, значительно превосходящие 35 символов. У меня есть идея переводить некоторые символы на похожие из латинницы, но выигрышь небольшой.(полностью кодировать тоже нельзя - на устройстве нет доступа к этим уведомлениям)

Уважаемые знатоки, подскажите что тут можно еще сделать?

спустя 1 час 33 минуты [обр] Филипп Ткачев(20/112)[досье]
echo json_encode($some_text, JSON_UNESCAPED_UNICODE);
RTFM
спустя 5 минут [обр] Thirteensmay(17/157)[досье]
Насколько я понимаю у вас не Apache/nginx, а какойто сервер apple, и реализацию push вы делали не самостоятельно а взяли чтото готовое с привязкой к этому самому apple, так что первое что приходит в голову - сделать реализацию push самостоятельно, возможно выкинув при этом apple, ограничение в 256 байт выглядит смешно и костыли лучше не городить. Возможно вы вообще просто недоразобрались и гдето ошибаетесь. Очень странно что iphone приложение пишется, а доступа к этим уведомлениям на устройстве нет, иначе в крайнем случае можно было бы разбивать уведомление при отправке на несколько кусков, собирать его в приложении и только тогда отображать. Ну и в конце концов, передавайте текст не \uXXXX а напрямую юникодом, UTF8, сэкономите как минимум в 3 раза.
спустя 44 минуты [обр] Филипп Ткачев(20/112)[досье]
Thirteensmay[досье], это фишка json_encode(). "Плавали, знаем"
спустя 2 часа 15 минут [обр] Ken Fin[досье]

Thirteensmay[досье]
нет, нет. Вы меня не правильно поняли. Сервер a2/nginx. Сам механизм пушей - создается сообщение,содержащее токен приложения на определенном устройстве, json объект с настройками и сообщением. Затем все это через ssl передается на сервер apple, который в свою очередь рассылает уведомления на устройства.
256 байт это даже не смешно,а ужасно грустно (и я к сожалению ничего с этим поделать не могу - это ограничение установленное apple(у андроидов подобный сервис дает 1024 байт))
Чисто utf-8 пробовал, но размер сообщения не уменьшился.=(

За JSON_UNESCAPED_UNICODE спасибо, но либо php врет, либо размер и правда от этого не меняется.

спустя 2 часа 52 минуты [обр] Marat Tanalin(3/78)[досье]
На всякий случай: константа JSON_UNESCAPED_UNICODE поддерживается в PHP лишь начиная с версии 5.4.
спустя 51 минуту [обр] Thirteensmay(17/157)[досье]

Ну если вы точно знаете что это ограничение эппловского сервиса, а не ваша ошибка, то ничего кроме реализации фрагментации наверное и не придумаешь, и это конечно надо обращаться к разработчикам вашего приложения, чтобы сделали поддержку в нем, я бы на вашем месте добыл железное подтверждение этого ограничения у сервиса, например ссылку на официальную доку или подтверждение от техподдержки, а потом пришел к начальнику и объяснил что иначе никак. У ВК может быть какая нибудь специальная партнерская возможность или что то иное в этом духе, собственно в эту сторону можно поковырять.

Но с юникодом разберитесь в любом случае, у вас сейчас чтото явно не так, \uXXXX - 6 байт, 256/6 = 42, у вас 35, ну собственно так где то и должно было быть за счет дополнительного json оформления, если же вы начнете передавать чистый utf8 то в случае кириллицы получите не 6 а 2 байта, т.е. сможете передавать как минимум 105 символов. Принтуйте, снифьте, разбирайтесь, ибо явно что то не то. Вот что значит "размер сообщения не уменьшился"? Покажите какое сообщение у вас отправляется побайтово.

спустя 2 дня 11 часов [обр] Алексей Полушин(62/231)[досье]
А нельзя так, чтобы в push уведомлении содержался только идентификатор новости, а приложение, получив уведомление, на сайт за заголовком лезло?
спустя 21 день [обр] Ken Fin[досье]
Коллеги, спасибо всем за советы! Кажется теперь все нормально работает. К сожалению от JSON_UNESCAPED_UNICODE пришлось отказаться и сделать замену символов вручную(вроде бы стало нормально). Фрагментировать пуши тоже не получится - так как на устройстве нет доступа к изменению этих уведомлений(что вообще довольно ущербно на мой взгляд)
Powered by POEM™ Engine Copyright © 2002-2005