2016-11-10 31 views
2

我想檢查用戶是否爲我的應用程序啓用了遠程通知,但即使禁用/卸載我的應用程序,它總是返回true。Swift ios檢查用戶是否啓用了通知總是返回true

我使用此代碼檢查:

if UIApplication.shared.isRegisteredForRemoteNotifications == false { 
    OneSignal.registerForPushNotifications() 
    print("Notifications is off") 
} else { 
    print("Notifications is on") 
} 

但是,這將始終運行:print("Notifications is on")

所以,我怎麼能檢查是否用戶已啓用通知我的應用程序?

+0

即使用戶拒絕或禁用通知,該應用程序仍會被註冊。 – rmaddy

+0

我在這裏的答案是你在找什麼:http://stackoverflow.com/a/28441181/312312 – Lefteris

回答

0

實際上,這將始終返回true,它將返回false只有在從未詢問遠程通知的權限的情況下。這意味着一旦你問了用戶,無論他回答了什麼,這總是會返回true

的存在的原因是,當你問權限,它直接註冊用戶(甚至沒有等待他的回答,您可以通過將斷點該委託是用戶的答案之前觸發檢查)。然後,如果用戶拒絕了該權限,該設備仍將被註冊,但通知不會顯示,直到用戶在常規設置中打開它們爲止。

這是不是一個錯誤,蘋果這樣做是爲了避免開發繼續要求的權限。所以它實際上不可能知道,如果一個用戶已經接受或拒絕的權限:/

+0

但是,如何某些應用程序顯示彈出式消息有時告訴我啓用通知。另外檢查我的答案吼叫 – user2636197

+0

他們是一些猜測,但它可能會棘手。而且你根本不確定,這只是一個猜測。我會嘗試找到我在之前的工作中做了些什麼,併發布了更新;) – RomOne

1
if let settings = UIApplication.shared.currentUserNotificationSettings { 
     if settings.types != UIUserNotificationType() { 
      print("is on!") 
     }else{ 
      print("is off!") 
     } 
}else{ 
    print("is off") 
} 

這似乎是工作,不知道它的正確方法?

+0

@RomOne沒有它的全部,請嘗試複製/粘貼:) – user2636197

+0

是的,我的錯誤:)我不完全確定,但在這裏我認爲,要測試用戶是否具有一般能不通知你的應用程序專門 – RomOne

+0

@RomOne這個沒有工作之一:/如果我按否認它不會提示我了 – user2636197