2015-05-26 7 views
0

Я использую библиотеку notnoop/java-apns для передачи сообщений с моего сервера на устройства IOS. Push работает нормально, сообщения поступают клиентам.notnoop/java-apns не может обнаружить ошибку

Я пытаюсь определить, было ли сообщение отправлено клиенту или нет, но Проблема заключается в том, что я не могу обнаружить ошибку/успех нажатого сообщения с помощью EnhancedApnsNotification и реализует класс ApnsDelegate.

messageSendFailed & messageSent не называются

Мой код

public class PushTest implements ApnsDelegate { 
private static pushtest instance = null; 

private static ApnsService service; 
private static int counter= 0; 

private pushtest() { 
} 

static public PushTest instance() { 
    if (instance == null) { 
     instance = new pushtest(); 
     try { 
      service = APNS.newService() 
        .withCert("certPath", "password") 
        .withSandboxDestination() 
        .build();  
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    return instance; 
} 

public void send(String token) { 
    LinkedHashMap<String, Boolean> result = new LinkedHashMap<String, Boolean>(); 
    // build payload 
    int now = (int)(new Date().getTime()/1000); 

    try { 
     String payload = APNS.newPayload() 
       .badge(3) 
       .alertBody("test") 
       .build(); 
    EnhancedApnsNotification notification = new EnhancedApnsNotification(counter++, 
     now + 60 * 60 /* Expire in one hour */, 
     token /* Device Token */, 
     payload); 
    service.push(notification);  
    } catch (Exception e1) { 
     System.out.println("IosPush :" + e1.getMessage()); 
    } 
} 
@Override 
public void connectionClosed(DeliveryError arg0, int arg1) { 
    System.out.println("connectionClosed");  
} 
@Override 
public void messageSendFailed(ApnsNotification arg0, Throwable arg1) { 
    System.out.println("messageSendFailed"); 
} 
@Override 
public void messageSent(ApnsNotification arg0) { 
    System.out.println("messageSent"); 
} 

}

ответ

0

Я думаю, что делегат просто не подключен к услуге. Создайте делегат, затем подключите его с помощью метода withDelegate (..).

public class MyApnsDelegate extends ApnsDelegateAdapter { 


    Logger log = LoggerFactory.getLogger(MyApnsDelegate.class); 

    @Override 
    public void messageSent(ApnsNotification apnsNotification, boolean b) 
    { 
     log.info("MyApnsDelegate called!"); 
    } 
} 

Затем в коде, который устанавливает службу APNS, APNS.newService() возвращает ApnsServiceBuilder, который позволяет установить делегат:

service = APNS.newService() 
       .withCert("certPath", "password") 
       .withSandboxDestination() 
       .withDelegate(new MyApnsDelegate()) 
       .build(); 
Смежные вопросы