Любой вариант, чтобы узнать, если приложение Apple получит push-уведомление?
Я создаю приложение xcode, которое получает push-уведомления, основная проблема в том, что push-уведомление очень важно для меня. поэтому я хочу проверить, доставлено ли push-уведомление на устройство с установленным приложением, я понимаю, что если на iphone нет подключения к Интернету / 3G, push-уведомление не попадает на устройство.
как я могу проверить, получает ли устройство уведомление или нет? Как я могу проверить, успешно ли APNS доставил push-уведомление?
Я хочу отправить смс, если push-уведомление не доставлено на устройство, поэтому я подумываю об идее получить событие уведомления, когда оно открыто push-уведомлением, и отправить запрос на мой сервер, чтобы я мог знать, является ли push-уведомление успешно доставить или нет. Основная проблема заключается в том, что пользователю необходимо открывать приложение каждый раз, когда он получает уведомление, а ночью это проблема. так что этот вариант мне не подходит.
Я проверяю push-уведомление сервера обратной связи, но не вижу никакой информации, которую я могу получить, если push-уведомление доставлено или нет
любая идея??
5 ответов
В iOS7 у вас есть новый метод под названием application:didReceiveRemoteNotification:fetchCompletionHandler:, который вы, вероятно, могли бы использовать для своей задачи. Из документов Apple:
Реализуйте этот метод, если ваше приложение поддерживает фоновый режим удаленных уведомлений.... При получении push-уведомления система отображает уведомление для пользователя и запускает приложение в фоновом режиме (при необходимости), чтобы оно могло вызвать этот метод. Используйте этот метод для загрузки любых данных, связанных с push-уведомлением. Когда ваш метод завершен, вызовите блок в параметре обработчика.
В отличие от метода application: didReceiveRemoteNotification:, который вызывается только во время работы приложения, система вызывает этот метод независимо от состояния вашего приложения.
Короткий ответ, вы не можете, так как APNS является одним из способов. Однако, так как приложение может выполнить произвольный код при получении уведомления, вы можете использовать это, чтобы сказать, отправьте запрос http на ваш собственный сервер, когда уведомление будет получено.
Существует множество причин, по которым push-уведомления могут не доставляться вашему пользователю или не доставляться своевременно. Apple не предоставляет никаких механизмов для запроса статуса отправленного вами push-уведомления.
Если ваше приложение в настоящее время работает на устройстве пользователя, и пользователь принимает уведомления для вашего приложения, вы можете реализовать следующий метод в своем делегате приложения. Он будет вызываться всякий раз, когда получено push-уведомление, и в этом методе вы можете отправить запрос обратно на ваш сервер, чтобы указать, что сообщение было получено. Однако это будет работать только тогда, когда пользователь запускает ваше приложение.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
В целом, похоже, вы полагаетесь на push-уведомления в том, чего не должны делать. Из Руководства по программированию локальных и push-уведомлений Apple:
Важно! Поскольку доставка не гарантируется, вы не должны зависеть от средства удаленных уведомлений для доставки критически важных данных в приложение через полезную нагрузку. И никогда не включайте конфиденциальные данные в полезную нагрузку. Вы должны использовать его только для уведомления пользователя о наличии новых данных.
Нет способа узнать, доставлено ли уведомление на устройство или нет. APNS - это односторонняя услуга. Если на устройстве нет подключения к Интернету, то сервер APNS будет удерживать последнее уведомление в течение некоторого периода времени, который не указан Apple. Если новое уведомление отправляется в APNS для доставки, тогда старые данные уведомления теряются и заменяются новыми данными, если они не доставлены. Если уведомление доставлено, то также старые данные уведомления удаляются на сервере APNS.
Пожалуйста, перейдите по следующей ссылке: Apple Push Notification
Надеюсь, это поможет вам...........
Если вы используете JAVAPNS для отправки уведомления APNS, вы можете использовать ниже:
List<PushedNotification> notifications =
Push.combined("alert", badge, "default", "cert.p12", "certpassword", true, deviceToken);
for (PushedNotification notification : notifications) {
if (notification.isSuccessful()) {
//Push is successful. Do your thing...
}
else {
//Push is not successful. Do your thing...
}
}