Комментарии 13
Кстати и Windows Phone тоже
Для сохранения device token я использую NSUserDefaults (минусов в этом подходе пока не вижу).
В доке (https://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ IPhoneOSClientImp.html%23//apple_ref/doc/uid/TP40008194-CH103-SW12) описано, что кешировать токен не нужно. Он может стать не валидным, лучше каждый раз его запрашивать. Если он не изменился, то ответ придёт сразу же:
Moreover, never cache a device token and give that to your provider; always get the token from the system whenever you need it. If your application has previously registered, calling registerForRemoteNotificationTypes: results in the operating system passing the device token to the delegate immediately without incurring additional overhead.
всё верно, но от момента старта приложения
//от метода
до вызова сервиса, с которым пошлю этот token на сервер, его же где-то хранить нужно. или я что-то упускаю и можно device token каким-то другим способом получить, кроме как из этого метода?
//от метода
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
до вызова сервиса, с которым пошлю этот token на сервер, его же где-то хранить нужно. или я что-то упускаю и можно device token каким-то другим способом получить, кроме как из этого метода?
Да, я понял. Я бы хранил в @property делегата приложения, чтобы оно на всякий случай не кешировалось между запусками.
вот тут обсуждается в каких случаях меняется device token — Does the device token ever change, once created?
В свое вермя прочел много топиков по поводу конвертации deviceToken из NSData в NSString и предложенный вариант мне кажется не самым удачным решением. При использовании спецификатора %@ согласно документации Apple вы получите строку из объекта с помощью метода descriptionWithLocale: если он доступен или description в противном случае. Нет никаких гарантий, что при обновлении до очередной версии iOS то, что возвращает этот метод не изменится и вам, тогда не придется в спешном порядке переписывать эту часть кода, чтобы все продолжало работать как работало. Сам пользуюсь для конвертации токена в строку следующим методом и вам сильно советую:
— (NSString *)stringWithDeviceToken:(NSData *)deviceToken {
const char *data = [deviceToken bytes];
NSMutableString *token = [NSMutableString string];
for (int i = 0; i < [deviceToken length]; i++) {
[token appendFormat:@"%02.2hhX", data[i]];
}
return [token copy];
}
— (NSString *)stringWithDeviceToken:(NSData *)deviceToken {
const char *data = [deviceToken bytes];
NSMutableString *token = [NSMutableString string];
for (int i = 0; i < [deviceToken length]; i++) {
[token appendFormat:@"%02.2hhX", data[i]];
}
return [token copy];
}
там просто разжёвано всё, чтобы не оставить шансов на ошибку тем, кто делает это в первый раз. посмотрел Pushwoosh — не понимаю за что платить.
всё, понял. это ваш продукт. напишите статью, расскажите чем хорош Pushwooosh и почему его нужно покупать.
бегло просмотрев сайт, я не понимаю ради чего приобретать зависимость от этого сервиса.
бегло просмотрев сайт, я не понимаю ради чего приобретать зависимость от этого сервиса.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
PushSharp — простая работа с Push Notifications