2

我有一個應用程序目前在beta測試,具有消息功能。它被設置爲當用戶從另一個用戶收到新消息時發送推送通知。只有時間推送通知的工作方式是當用戶專門向我發送消息時。如果我嘗試向任何其他用戶發送消息或任何用戶互相發送不包含我的消息,則推送通知不起作用。 只有發送給我的消息會在我的設備上觸發推送通知。推送通知不從我的設備發送 - 解析

下面是Parse的一些簡單屏幕截圖,其中顯示了正確發送的一個按鍵以及沒有發送的一個按鍵。

這是命名爲「阿利薩」我在我正確地接收到推送通知其他用戶發送私人消息(你可以通過「推送發送」 = 1見):

working push notification

這裏是說推的細節:

working push notification details

現在,這裏是一傢俬人消息發送我的設備,那收到了同樣的裝置正確推送通知,回到「Alissa」。正如你所看到的,「推送發送」 = 0,意思是我的設備發送的消息,但收件人沒有收到推送通知:

not working push notification

這裏是推的細節,包含幾乎相同信息工作一個發給我:

not working push notification details

最後,這裏是另一個推不工作「阿利薩」那不是我,所以用戶從我的設備放在其他用戶之間發送。

enter image description here enter image description here

這是一種模式,當我看到所有推的列表,從用戶在我的應用程序。除了推送發送到我的設備時,它們都「推送」= 0,「推送發送= 1」。

我已經打印到我的推送通知方法完成處理程序中的控制檯,並且它們表明當我向其他用戶發送消息時,推送已成功發送。我還會指出,我的設備正在用於此應用程序的開發。

另外作爲一個方面說明,它並不總是這樣。幾個星期前,一切正常。我發佈了多個新版本,從未遇到過問題。

任何人都可以指引我在正確的方向嗎?

編輯:下面我已經包含更多詳細信息,包括我的應用程序中的代碼和 我的開發者帳戶和解析後端的詳細信息。在我的應用程序

以下

相關代碼代碼,我在我的AppDelegate所建議的解析,包括設立推送通知。值得注意的是,println語句「確實註冊了用戶通知設置」和「註冊設備令牌的遠程通知」都在應用程序啓動時被正確記錄。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // ... 
    let userNotificationTypes = UIUserNotificationType.Alert | UIUserNotificationType.Badge 
    let settings = UIUserNotificationSettings(forTypes: userNotificationTypes, categories: nil) 
    application.registerUserNotificationSettings(settings) 
    application.registerForRemoteNotifications() 
    // ... 
} 

func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) { 
    println("did register user notification settings") 
} 

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 
    PFInstallation.currentInstallation().setDeviceTokenFromData(deviceToken) 
    PFInstallation.currentInstallation().saveInBackground() 
    println("did register for remote notifications with device token") 
} 

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { 
    println("didFailToRegisterForRemoteNotificationsWithError: ", error.localizedDescription) 
} 

這是我將郵件發送給其他用戶時所包含的代碼。 println陳述「成功」記錄正確也是不值得的。從我的開發人員帳戶

這裏

PFInstallation.query().whereKey("user", equalTo: incomingUser) 

    PFPush().setQuery(pushQuery) 
    let senderName = PFUser.currentUser()!.objectForKey("name") as! String 
    let data = [ 
     "alert" : "New message from \(senderName)", 
     "badge" : "Increment" 
    ] 
    push.setData(data) 
    push.sendPushInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in 
     if success { 
      println("success") 
     } else { 
      println(error?.localizedDescription) 
     } 
    } 

相關的細節是表示我的開發人員門戶我的應用程序ID的屏幕截圖。這似乎表明,推送通知能正常(我刪除並重新添加的所有證書與新的供應配置文件)

Push notifications enabled in developer portal

相關細節從我解析賬號

這裏是我的推Parse中的通知設置。當我重新創建證書時,所有這些信息都已更新。

Parse push notification settings

雖然我不知道這可能提供洞察的一些水平。這是Parse中PFInstallations表的截圖。任何時候有人登錄/打開應用程序都會創建安裝。我只是在我的設備上運行應用程序,而我在桌面上的記錄是最好的。與其餘部分不同的是,「deviceToken」列中的值僅適用於我的設備。當我刪除我的PFInstallation記錄並重新啓動應用程序重新創建它時,總是會在「deviceToken」下創建一個值。

enter image description here

在Xcode

相關細節下面是代碼在我的Xcode構建設置簽署的擴展視圖。此代碼簽名在項目和目標代碼簽名中都是相同的。

enter image description here enter image description here

再次,推送通知正在爲所有用戶短信的其他用戶,只有當從我的設備發送給其他用戶的消息不工作。

+0

亞倫,你可以發佈你的推送通知代碼,iOS和任何你可能使用的雲代碼?也許我們可以從那裏更好地診斷。 –

+0

@RyanKreager我編輯了我原來的帖子,在上面包含了更多的細節。 – Aaron

+0

@RyanKreager此外,我目前沒有使用任何雲代碼。 – Aaron

回答

1

從什麼使你的設備獨特開始,它的狀態是一個開發環境設備是可能的罪魁禍首。

一個很好的檢查位置是您的設備的構建和隨後使用的推送證書。如果您的設備處於開發模式(意味着您正在通過Xcode構建並部署到您的手機中),那麼它將使用推送證書代替生產進行開發。(有關此差異的更多信息,請參閱this great article by Ray Wenderlich

此處的關鍵因素是隻有您的設備將使用此不同的證書。如果它被吊銷/損壞/未安裝,則只有您的設備會遇到此問題。

您也可以通過將應用程序通過TestFlight/HockeyApp /等部署到您的手機來測試此功能,而不是讓Xcode加載它。

UPDATE:

剛剛澆過的代碼,檢查錯誤。有一件事已經注意到了:你的didFinishLaunchingWithOptions包括一個額外的PFInstallation.currentInstallation().saveInBackground() - 你應該刪除它,只有在didRegisterForRemoteNotificationsWithDeviceToken方法。

這就是爲什麼只有你的設備在它的PFInstallation中有一個ID,可能是你的設備無法聯繫其他任何人的原因 - 推送系統正在工作,但它沒有地址從那裏呼叫;這將是一次沉默的失敗,而不是解析系統。

您是否嘗試過讓用戶互相推送,或只向您和您發送推送?

+0

這是有道理的。奇怪的是我在我的開發設備上使用了Testflight,並且我已經刪除了我的Xcode構建,並通過Testflight安裝了應用程序,但它仍然無法正常工作。除非在開發設備上通過Testflight進行安裝,否則無論TestFlight如何,它都會受到開發推送證書的影響。 – Aaron

+0

我會嘗試硬幣的另一面然後:撤銷,重新創建您的開發推送證書並重新上傳到Parse,看看是否有幫助。 –

+0

Blah,在重新配置配置文件和所有證書後仍然不工作。明天我會收到這個問題。 – Aaron