web-dev-qa-db-ja.com

アプリ内のIphoneプッシュ通知を有効または無効にする

プッシュ通知を受信できるiphoneアプリがあります。現在、iphoneの設定/通知に移動して、アプリのプッシュ通知を無効にできます。

しかし、アプリ内にスイッチまたはボタンを追加して、プッシュ通知を有効または無効にしたいと考えています。

Foursqureのiphoneアプリで見たからです。彼らは設定呼び出し通知設定のセクションを取得し、ユーザーはアプリのさまざまな種類の通知を有効または無効にできます。

私はネット全体を見渡してこれの適切な解決策を見つけましたが、それでも方法が見つかりませんでした。誰もがそれを行う方法を教えてくれますか?

前もって感謝します :)

26

まず、アプリ内でcan not enable and disablePush notificationを使用します。あなたがそれをしたいくつかのアプリを見つけた場合、回避策の解決策があるはずです。

アプリ内で行う場合と同様に、1つの識別子を使用して、プッシュ通知の有効化ボタンと無効化ボタンに従ってサーバーに送信します。したがって、サーバー側のコーディングはこの識別子を使用し、それに従って機能します。識別子のように、それはあなたのサーバーがそれ以外の場合は通知を送信しないよりも有効であると言います。

次のコードを使用して、ユーザーセットenableまたはdisablePush Notificationsを確認できます。

Iphoneプッシュ通知を有効または無効にする

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types == UIRemoteNotificationTypeNone) 
 // Yes it is..

これがあなたを助けることを願っています。

20
Nit

[参考-iOS 10で機能しなくなったと報告しているユーザーはほとんどいません]

registerForRemoteNotificationTypesunregisterForRemoteNotificationTypesをそれぞれ再度呼び出すことで、アプリケーションでプッシュ通知を簡単に有効または無効にすることができます。私はこれを試しましたが、うまくいきます。

32
Varun Bhatia

実際には、プッシュ通知を登録および登録解除することにより、プッシュ通知を有効および無効にすることができます。

プッシュ通知を有効にする:

if #available(iOS 10.0, *) {
   // For iOS 10.0 +
   let center  = UNUserNotificationCenter.current()
   center.delegate = self
   center.requestAuthorization(options: [.sound, .alert, .badge]) { (granted, error) in
        if error == nil{
           DispatchQueue.main.async(execute: {
                 UIApplication.shared.registerForRemoteNotifications()
           }) 
        }
   }
}else{
    // Below iOS 10.0

    let settings = UIUserNotificationSettings(types: [.sound, .alert, .badge], categories: nil)
    UIApplication.shared.registerUserNotificationSettings(settings)

    //or
    //UIApplication.shared.registerForRemoteNotifications()
}

デリゲートメソッド

@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

}

@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

}


func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    // .. Receipt of device token
}


func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
    // handle error
}

プッシュ通知を無効にする:

UIApplication.shared.unregisterForRemoteNotifications()
2
Krunal

FireBaseを使用してデバイスにプッシュ通知を送信している場合は、トピックサブスクリプションを使用して、サブスクライブしているデバイスでプッシュ通知を有効にし、ユーザーにプッシュ通知を受信させたくない場合にトピックからユーザーのサブスクライブを解除できます。登録解除されたデバイス。

ユーザーをトピックにサブスクライブするには、Firebaseをインポートしてから、このメソッドを使用します。

Messaging.messaging().subscribe(toTopic: "topicName")

ユーザーの登録を解除するには:

Messaging.messaging().unsubscribe(fromTopic: "topicName")
0
Dyary