簡體   English   中英

重置應用的推送通知設置

[英]Reset push notification settings for app

我正在使用推送通知開發應用程序。 要檢查所有可能的用戶交互方式,我想在用戶拒絕在第一次啟動時為我的應用啟用推送通知時測試我的應用。

但是,對話框(由registerForRemoteNotificationTypes啟動)每個應用程序只出現一次。 如何重置iPhone OS的應用程序內存。 刪除應用程序並重新安裝沒有幫助。

技術說明TN2265:推送通知故障排除

第一次啟用推送的應用程序注冊推送通知時,iOS會詢問用戶是否希望接收該應用程序的通知。 一旦用戶響應此警報,除非設備已恢復或應用程序已卸載至少一天,否則不會再次顯示該警報。

如果您想模擬首次運行的應用,可以將應用程序卸載一天。 通過將系統時鍾向前設置一天或更長時間,完全關閉設備,然后重新打開設備,您可以實現后者而無需實際等待一天。

更新:如下面的評論中所述,此解決方案自iOS 5.1起停止工作。 我鼓勵向Apple提交一個錯誤,以便他們可以更新他們的文檔。 目前的解決方案似乎是重置設備的內容和設置。

更新:技術說明已更新,其中的新步驟在iOS 7中正常運行。

  1. 從設備中刪除您的應用。
  2. 完全關閉設備並重新打開。
  3. 轉到設置>常規>日期和時間,並將日期設置為一天或更長時間。
  4. 再次完全關閉設備並重新打開。

從iOS 9開始更新

只需刪除並重新安裝應用程序,通知狀態就會重置為notDetermined (意味着會出現提示)。

感謝Gomfucius的回答: https ://stackoverflow.com/a/33247900/704803

另一個僅用於測試解決方案的方法是簡單地更改您的包ID。 一旦完成,別忘了改回來!

在iOS 9.0.2上,每次刪除應用程序並重新安裝時,我都會收到“注冊推送通知警報”。 這適用於AppStore生產下載和adhoc模式。

更新:已確認這適用於iOS 9.x.

如前所述,重置iOS3上的應用程序的通知狀態的方法更新為iOS5。

這適用於iOS6:

  • 從設備中刪除應用程序
  • 將設備日期時間設置為提前兩天或更長時間
  • 重啟設備
  • 將設備日期時間設置為提前兩天或更長時間
  • 重啟設備
  • 再次安裝並運行該應用程序

但是這只會使初始提示再次出現 - 它不會刪除任何其他推送狀態相關的東西。

plist:/private/var/mobile/Library/RemoteNotification/Clients.plist

...包含推送通知的注冊客戶端。 刪除應用程序的條目將導致提示重新出現

以編程方式執行它似乎每次都適合我。 我有一個沒有注釋以下行的構建:

 [[UIApplication sharedApplication] unregisterForRemoteNotifications];

我每次想從PN取消注冊時都會運行它。 您可能必須從最近列表中明確地結束應用,並在“設置”應用中使用“通知中心”以使其正確。

此外,要求用戶注冊PN的UI提示可能不會顯示。 不確定是否已在任何最新的iOS版本中禁用。

正如ianolito所說,設置日期應該有效:

通過將系統時鍾向前設置一天或更長時間,完全關閉設備,然后重新打開設備,您可以實現后者而無需實際等待一天。

我注意到我的設備(iPhone 4,iOS 6.1.2)將系統時鍾設置為前一天甚至幾天都不適合我。 所以我將日期設置為一個月 ,然后它確實有效,我的應用程序再次顯示通知提示。

希望這對任何人都有幫助,它可能有點頭痛!

我同意micmdk ..我有一個推送通知的開發環境設置,需要一種方法來重置我的手機看起來像一個初始安裝...只有這些精確的步驟適合我...需要重新啟動設備:

來自APPLE TECH DOC:

重置iOS上的推送通知權限警報第一次啟用推送的應用程序注冊推送通知時,iOS會詢問用戶是否希望接收該應用程序的通知。 一旦用戶響應此警報,除非設備已恢復或應用程序已卸載至少一天,否則不會再次顯示該警報。

如果您想模擬首次運行的應用,可以將應用程序卸載一天。 您可以通過以下步驟實現后者而無需等待一天:

  1. 從設備中刪除您的應用。

  2. 完全關閉設備並重新打開。

  3. 轉到設置>常規>日期和時間,並將日期設置為一天或更長時間。

  4. 再次完全關閉設備並重新打開。

在已接受的答案中提到的相同技術說明( TN2265 - 故障排除推送通知)已經針對iOS 5及更高版本的解決方案進行了更新。

簡而言之:每次都創建一個備份並從中恢復。

在iOS 5及更高版本中,通過從備份還原設備來重置推送通知權限警報(r.11450187)。 以下是有效執行此操作的步驟:

  1. 使用Xcode Organizer在設備上安裝您的應用程序。 關鍵是首次安裝應用程序而不運行它。
  2. 使用iTunes備份設備。
  3. 運行應用程序。 將顯示推送通知權限警報。
  4. 如果要重置推送通知權限警報,請從您在第一步中創建的備份中還原設備。

我過去一直在想這個,並得出結論,它實際上並不是我的代碼的有效測試用例。 我不認為您的應用程序代碼實際上可以區分第一次拒絕通知或稍后從iPhone通知設置禁用通知的人之間的區別。 確實,用戶體驗不同,但隱藏在對registerForRemoteNotificationTypes的調用中。

調用unregisterForRemoteNotifications不會從通知設置中完全刪除應用程序 - 盡管它確實刪除了該應用程序的設置內容。 所以這仍然不會導致在下次應用程序運行時第二次向用戶顯示對話框(至少在我目前正在測試的v3.1.3上沒有)。 但正如我上面所說,你可能不應該擔心這一點。

Apple Tech Note還描述了您可以恢復設備以重置推送通知對話框。

它並沒有說你也可以在設備本身(iOS 5.x)上使用“常規 - >重置 - >擦除所有內容和設置”選項。

除了ianolito的答案。

與我一年前下載的應用程序存在同樣的問題並且最初拒絕推送通知。 現在想要回推推送通知,這些步驟適用於iOS 7測試版。 不確定哪個點完全觸發了它。

  • 關閉並刪除該應用。
  • 轉到您的iCloud設置並從iCloud中刪除該應用程序。 在已啟用應用程序的iCloud備份的所有其他設備上執行此操作。 停用並刪除后進行全新備份。 應該不再在備份下列出該應用程序。 (這可能是為什么ianolito描述的Apple技術說明停止在iOS 5中工作的原因,因為iCloud是在iOS 5中引入的,並且許多都啟用了iCloud備份以啟用應用程序。)
  • 轉到您的時間設置並提前超過1個月設置時間。
  • 關閉iPhone(不重置)。
  • 等一下,再次打開並再次下載應用程序。
  • 啟動應用程序,我再次出現了對話框。
  • 再次啟用應用備份,因為它仍處於停用狀態。 糾正時間。

感謝上帝,我沒有“刪除所有內容和設置”。 也許它會幫助別人。

經過幾個小時的搜索,並沒有上述建議的運氣,這就像3.x +的魅力

override func viewDidLoad() {
        super.viewDidLoad()


            requestAuthorization()

}

func requestAuthorization() {

        if #available(iOS 10.0, *) {

            UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
                print("Access granted: \(granted.description)")
            }

        } else {
            // Fallback on earlier versions
        }

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM