2017-04-26 71 views
3

我讀How to control when to prompt user for push notification permissions in iOS以及類似的問題,但他們沒有寫在Swift 3中。按下按鈕後,如何提示用戶推送通知權限?

我已經讀了Registering for Push Notifications in Xcode 8/Swift 3.0?五次。

我一遍又一遍在模擬器中運行我的應用程序,但第一次後,應用程序從未提示用戶推送通知權限。

我使用的代碼從Registering for Push Notifications in Xcode 8/Swift 3.0?和不斷嘗試不同的答案和代碼移動到不同的地方,這樣用戶將被要求同意後,才按下某個按鈕,而不是立即時,應用程序啓動。

我是否必須註冊一個Apple ID等等的推送通知代碼才能在模擬器中工作工作

+0

「後的第一時間,應用程序不會提示用戶推送通知權限的用戶」 嘛,沒它提示的第一次?你回答了什麼? –

+0

我不認爲模擬器提示推送通知。 –

回答

2

首先,您應該只提示您的用戶一次關於他們是否要獲取推送通知。因此,將它綁定到按鈕並嘗試每次運行它都是一個糟糕的用戶體驗決定。如果按鈕實際上做了更多需要啓用推送通知的內容,則只能將推送通知提示與按鈕綁定。

要向用戶註冊推送通知,您應該使用UIApplicationregisterForRemoteNotifications方法。當此方法運行時,系統會提示您的用戶是否要接收推送通知 - 但僅限一次!他們設置的設置將被視爲確定性的,您的用戶將會再次提示而不是。如果他們想要開始接收推送通知,則必須在應用的設置中更改該通知。這是預期的行爲,是你應該怎麼做的。

如果你想,當他們按一個按鈕,僅提示用戶,然後從你的應用程序的啓動代碼中刪除,以registerForRemoteNotifications任何呼叫和呼叫從綁定到您的按鈕,而不是操作的方法。

如果要重置推送通知權限用於測試目的this is how Apple says it's possible:

重置推送通知權限警報iOS上

第一時間推送通知啓用推送應用寄存器,iOS會詢問用戶是否希望收到該應用程序的通知。一旦用戶對此警報作出響應,除非設備已恢復或應用程序已卸載至少一天,否則不會再次出現。

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

  1. 從設備上刪除您的應用程序。
  2. 完全關閉設備並重新打開設備。
  3. 轉到設置>常規>日期&時間和日期提前一天或更多。
  4. 再次完全關閉設備並重新打開設備。
+0

「首先,您應該只提示用戶一次是否要獲取推送通知,因此將其綁定到按鈕並嘗試每次運行都是一個糟糕的用戶體驗決定。」 絕對!每次應用啓動時,我都不會嘗試運行它,這是初始入門體驗的一部分。 「僅在按下按鈕時提示用戶......從與按鈕相關的操作中調用該方法。」 這意味着將代碼放入View Controller中的App Delegate中嗎?我嘗試過,但它仍然要求在應用程序打開後立即獲得許可。 – jfjldsfjljfkls

+0

它可能會根據您在Info.plist中指定的通知類型進行詢問。但奇怪的是,因爲每個可用資源都似乎表明只有在調用registerForRemoteNotifications時纔會顯示推送通知提示。不幸的是,我現在無法對此進行測試。 –