2015-11-16 27 views
2

蘋果文檔對設備的deviceToken何時可以更改有點模糊。它支付防守代碼並測試該代碼。有沒有辦法強制你的iOS推送通知deviceToken改變?

我寫了我的應用程序,以便在啓動時註冊推送通知並處理didRegisterForRemoteNotificationsWithDeviceToken回調。

我的didRegisterForRemoteNotificationsWithDeviceToken將最後一個設備令牌保存爲用戶默認值,並且如果令牌仍然相同,它將繼續。如果它根本沒有保存的令牌,或者令牌不匹配,它會上傳我們的服務器的新令牌。

我也有一種機制,可以讓我用人類可讀的名稱命名我的測試設備,如「4s_1」「5s_1」「5s_2​​」等。我有一個服務器命令行工具,它採用人類可讀的設備名稱,從中查找設備的'identifierForVendor',然後使用標識符查找設備令牌。然後觸發沙箱通知。

似乎刪除應用程序並重新安裝應用程序會導致'identifierForVendor'發生更改,但不是deviceToken,這與我想要進行測試的情況完全相反。我想要一些永不改變的值來唯一標識測試設備,並且改變設備標記以便測試我的代碼。

編輯:由於寫了這個我已經改變了應用程序來生成它自己的UUID並將其保存到鑰匙串中,正如Wain在他的回答中所建議的那樣。

是否有辦法強制Apple的APN更改設備的令牌,以便我可以測試出我的代碼(客戶端和服務器端)用於處理令牌更改的情況?

回答

2

我不這麼認爲。

如果你想要一個唯一的標識符,那麼你應該明確地創建一個,並將其存儲在鑰匙串,那麼你可以存儲設備的名稱和反對這一切其他細節,所以你有真理的單點。

您存儲在鑰匙串中的任何標識符都會一直存在,直到它被明確刪除或設備從沒有該鑰匙串內容的備份中恢復。

+0

我正在考慮去鑰匙扣路線。鑰匙串條目在刪除給定開發者帳戶中的所有應用程序後都可以倖免於難 –

+0

從開發者帳戶中刪除?鑰匙串在設備中刪除應用程序。 – Wain

+0

很酷。我擔心應用程序鑰匙串條目與共享用戶默認條目類似,並且在開發人員帳戶的最後一個應用程序被刪除時被清除,但它們仍然存在。感謝您的建議。 –

1

我不知道,如果這種方法還重置令牌,但您可以嘗試reset the permission

重置推送通知警報的權限在iOS上的第一個 時間推啓用推送應用寄存器通知,iOS會詢問 用戶是否希望收到該應用的通知。一旦用戶 迴應了這一警告,除非 設備恢復或應用程序已被卸載了至少一天,它不會被再次提出。

如果你想模擬首次您的應用程序的運行,你可以離開 卸載了一天的應用程序。您可以實現後者沒有 實際上按照下列步驟等待一天:

,從設備刪除您的應用程序。完全關閉設備,然後 重新打開。轉到設置>常規>日期&時間並將日期設置爲 一天或更長時間。再次將設備完全關閉,然後 重新打開。

關於設備標識符的更改:您可以在您的測試設備上安裝第二個應用程序(來自同一發行商的空白應用程序)。如果你重新安裝你的實際應用,identifierForVendor不應該改變。

+1

我剛剛嘗試了您概述的步驟,並重置了推送通知權限標誌,以便您再次獲得提示(「此應用程序想要向您發送推送通知。好嗎?」),但它不會更改deviceToken。 :( –

+1

太糟糕了。無論如何謝謝你試試看。 – tilo

相關問題