2016-11-17 2 views
0

Итак, я пытаюсь установить связь с APNS из java. Я нашел java-apns, javapns и pushy библиотеки. Кажется, что у Java-apns есть наиболее подходящий API.Java: Push Уведомления отправлены, но не получены

Init:

public static void main(String[] args) { 
    String certificateFilePath = args[0]; // "/path/to/cert.p12" 
    apnsService = APNS.newService() 
     .withCert(certificateFilePath, Config.APNS_PROVIDER_CERTIFICATE_PASSWORD) 
     .withDelegate(new ApnsDelegate() { 
      @Override 
      public void messageSent(ApnsNotification apnsNotification, boolean b) { 
       System.out.println("message sent"); 
      } 

      @Override 
      public void messageSendFailed(ApnsNotification apnsNotification, Throwable throwable) { 
       System.out.println("message failed"); 
      } 

      @Override 
      public void connectionClosed(DeliveryError deliveryError, int i) { 
       System.out.println("connection closed"); 
      } 

      @Override 
      public void cacheLengthExceeded(int i) { 
       System.out.println("cache length exceeded"); 
      } 

      @Override 
      public void notificationsResent(int i) { 
       System.out.println("notification resent"); 
      } 
     }) 
     .withSandboxDestination() 
     .build(); 

    ... 

} 

На данный момент IOS приложение запускается на устройстве. Регистрируются локальные и удаленные уведомления, маркер устройства получает и отправляет на сервер.

Потом какое-то событие происходит, и я посылаю уведомление:

static void sendMessage(List<String> tokens, String message) { 
    String payload = APNS.newPayload().alertBody(message).build(); 
    apnsService.push(tokens, payload); 
} 

Каждый маркер является чем-то вроде "5fb58761f9...4e92465e12".

Единственное, что говорит ApnsDelegate, это «сообщение отправлено», но на устройстве ничего не происходит. И я думаю, что сообщение действительно отправлено, потому что я попытался отправить уведомление с поврежденным токеном, и в этом случае я получаю сообщение «сообщение не удалось» и бросается с ошибкой, которая говорит о недопустимом токене.

Итак, на самом деле я даже не могу понять происхождение моей проблемы. Но я чувствую, что это на Java, потому что часть iOS очень проста в отличие от серверной части со всеми ее HTTP/2-voodoo-stuff.

+0

Какой iPhone OS? – iMHitesh

+0

@Hiteshsurani, я тестирую устройство с iOS10, но моя цель развертывания - 8.0 – seelts

+0

Если вам не понравилось редактирование от пользователя 12K (например, @RadLexus), возможно, стоит попробовать их спросить о цель редактирования. В этом случае это было совершенно правильно - мы не используем [решены] заглавные заголовки, и мы не ставим решения в ответах. Всегда ставьте их в ответ, который я сделал для вас ниже. – halfer

ответ

1

Спасибо, что задали этот вопрос.

я столкнулась с такой же проблемой при работе с прошивкой 10.

Если вы работаете с прошивкой 10 или выше, то это обязательно ON удаленного уведомления в возможностях.

Перейти к -> Project setting -> capabilities -> Enable Push Notifications.

Перейти к ->Project setting -> возможности -> Background Mode -> Enable Remote Notification and VoIp

UPDATE:

Если вы хотите подать точное решение затем проверить локально следующим образом.

Скачать simplepush.php из here

Сохранить .pem файл в том же каталоге.

Заменить имя файла .pem и simplepush.php

Открыть терминал

Гото ваш каталог simplepush.php.

Выполните следующую команду

php simplepush.php 

Если у вас есть получить толчок, то необходимо проверить с java конца в противном случае проверьте в IOS конце

+0

Эти параметры уже включены. Кажется, это не вопрос. – seelts

1

(Опубликовано от имени О.П.):

Я решил это, это была моя глупая ошибка!Приложение было на переднем плане, когда я ожидал увидеть уведомления. После того, как я его закрыл, появились уведомления.

1

Вы правы, что уведомления не отображаются «iOS», если ваше приложение находится на переднем плане. ОДНАКО, событие уведомления происходит, и если у вас есть правильный метод в AppDelegate, iOS предоставит вам полезную нагрузку для уведомлений для вашего приложения. Затем вы могли бы сделать что-то в фоновом режиме, или вы могли бы отобразить собственный пользовательский интерфейс (например, показывать воздушный шар с номером в вашем приложении, например).

Apple doc for didReceiveRemoteNotification

+0

В моем случае 'didReceiveRemoteNotification' не вызывается, когда приложение находится на переднем плане – seelts

+0

Существуют две формы disReceiveRemoteNotification. У одного есть больше параметров, чем у другого (обработчик завершения выборки). Для iOS10 это версия, которую вы должны поддерживать, и ее нужно вызвать для всех уведомлений даже на переднем плане. Однако вам все равно придется реализовать другую форму в зависимости от того, какой SDK вы используете для сборки. Убедитесь, что вы реализуете оба варианта и проверяете, стреляете ли вы. См. Https://developer.apple.com/reference/uikit/uiapplicationdelegate/1623013-application – ericWasTaken

+0

Я тестировал обе формы – seelts

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