web-dev-qa-db-ja.com

有効/無効Apple iPhoneアプリからのプッシュ通知?

APNSについてもう1つ疑問があります。これは、アプリが最初に起動したときに、アプリがAppleプッシュ通知の許可を要求するときです。ユーザーが通知を受信できることを承認した場合、通知を受信できます。ユーザーがキャンセルした場合、通知を受信できません。クリアしますか? ??

今私の疑問は、

  1. 数日後にユーザーがアプリからプッシュ通知サービスをキャンセルした場合(Cancelボタンをクリックした)、最初に受け取りたい場合Appleプッシュ通知を有効にすることができます。 Appleアプリから特定のユーザーにもう一度通知をプッシュします。

  2. ユーザーがAppleプッシュ通知サービスを最初に受け入れ、数日後に通知を受け取りたくない場合は、アプリでAPNSを無効にできますか?私の疑問を理解していただければ幸いです。この疑問を明確にしていただけませんか?

  3. これらの上記のシナリオをiPhoneアプリで実行することは可能ですか?

私を助けてください。前もって感謝します。

20
Gopinath

残念ながら、アプリのコードからアプリのプッシュ通知を有効または無効にすることはできません。許可を求めるダイアログは一度だけ表示されます。通常、他のアプリは、[設定]-> [通知]-> [アプリ名]に移動して、プッシュ通知を有効または無効にする指示をユーザーに表示します。

15
adig

UIRemoteNotificationType enabledTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];を使用してアプリの権限を読み取り、さまざまなタイプでビット単位の操作を実行して、どのタイプが有効になっているかを確認できます。 unregisterForRemoteNotificationsを呼び出して通知を無効にすることもできます。ユーザーに指示することはできますが、通知をオンにすることはできません。

16
jrtc27

私の要件は、UISwitchを使用してpushnotificatonを有効および無効にすることでした。コードからのプッシュ通知を有効にするボタンアクション内でこれを使用します。

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
   (UIRemoteNotificationTypeBadge |  UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

無効にするために

[[UIApplication sharedApplication] unregisterForRemoteNotifications];
NSLog(@"UnRegistered for pushnotification");
4
arshad

IPhoneのデバイストークンを初めてAPNサーバーに登録すると、プッシュ通知を受け取ることができます。後で、デバイス設定→通知→アプリから有効/無効にできます。

1
wasim

1.アプリからいいえいいえ、それはユーザーがアプリをインストールした後初めてアプリを開いたときに表示されます..その場合、彼はそれを許可することを決定し、デバイス設定からアクティブ化できます。

2.それはアプリと設定から行うことができます。アプリからそれを無効にしたい場合は、サーバートークン(プッシュ通知を無効にすることに決めた人)をサーバーに送信し、exに保存できます。 「通知リストなし」として、ペイロードを送信するときにこれらのトークンを無視して、通知を受信しないようにします。

3.私はすでに答えました。

幸運を。

1
Malek_Jundi

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

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

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()
0
Krunal

このコードを使用して、iOS 9でサポートを提供できます

    if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) {

    UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];

    if (types == UIUserNotificationTypeNone) {
        // Do something
        NSLog(@"");
    }
} else {

    UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

    if (types == UIRemoteNotificationTypeNone) {
        // Do something
        NSLog(@"");
    }
}

参照 iOS 8ではサポートされていないため、enabledRemoteNotificationTypesを使用してコードを更新する方法?

0
debiasej