2016-11-17 163 views
0

所以,我試圖從Java與APNS進行通信。我找到了java-apns,javapns和pushy庫。 Java-apns似乎擁有最充足的API。Java:推送通知但未收到

初始化:

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

感謝您提出這個問題。

我都面臨着同樣的問題,當與iOS 10.

工作,如果你已經與iOS 10或以上的工作,那麼它是強制性的,以在功能遠程通知。

轉到-> Project setting -> capabilities -> Enable Push Notifications.

進入 - >Project setting ->能力-> Background Mode -> Enable Remote Notification and VoIp

UPDATE:

如果你想以文件的精確解,然後如下本地檢查。

here

下載simplepush.php保存.pem文件同一目錄下。

替換您的.pem文件名和simplepush.php

打開終端

轉到您的simplepush.php目錄。

執行以下命令

php simplepush.php 

如果你有接收推送則需要從java末檢查,否則檢查到的iOS結束

+0

這些選項已啓用。看起來這不是重點。 – seelts

1

(發佈代表OP)的

我解決了它,這是我的愚蠢的錯誤!當我期待看到通知時,該應用程序處於前臺。關閉後,通知開始出現。

1

如果您的應用程序位於前臺,則說明iOS沒有「顯示」通知是正確的。然而,通知事件確實發生,如果你的AppDelegate中有正確的方法,iOS會爲你的應用程序提供通知載荷。然後,您可以在後臺執行某些操作,或者您可以顯示自己的UI(例如,在應用內顯示帶有數字徽章的氣球)。

查看Apple doc for didReceiveRemoteNotification

+0

在我的情況下''didReceiveRemoteNotification'不會在應用程序處於前景時調用 – seelts

+0

實際上有兩種形式的disReceiveRemoteNotification。一個具有比另一個更多的參數(一個提取完成處理程序)。對於iOS10,這是您必須支持的版本,即使在前臺,它也應該在所有通知上進行調用。但是,您可能仍需要實施其他表單,具體取決於您使用的SDK來構建。確保你實現了兩者並檢查是否有人射擊。請參閱https://developer.apple.com/reference/uikit/uiapplicationdelegate/1623013-application – ericWasTaken

+0

我已使用這兩種表單進行了測試 – seelts