включить/отключить apple push notification из приложения iphone?

<p>у меня есть еще одно сомнение в <code>apns</code>. то есть, когда приложение запускается впервые, оно запрашивает разрешение на push-уведомление apple, если пользователь принял их, они могут получать уведомления. если пользователь отменил, они не могут получать никаких уведомлений. я чист?? </p><p>теперь я сомневаюсь,</p><ol> <li><p>в первый раз, если пользователь отменил службу push-уведомлений из приложения (нажал кнопку <code>cancel</code>) через несколько дней, если они хотят получать apple push-уведомление, можно снова включить push-уведомление apple для конкретного пользователя из приложения. </p></li> <li><p>и если пользователь сначала принимает службу уведомлений apple push, а через несколько дней, если он не хочет получать уведомления, можно ли отключить <code>apns</code> в нашем приложении? я надеюсь, вы понимаете мои сомнения. кто-нибудь может прояснить это сомнение?</p></li> <li><p>можно ли сделать вышеописанные сценарии в нашем приложении для iphone?</p></li> </ol><p>пожалуйста, помогите мне. заранее спасибо.</p>

<p>к сожалению, вы не можете включить или отключить push-уведомления для вашего приложения из кода приложения. диалог с запросом разрешения отображается только один раз. обычно другие приложения отображают инструкции для пользователя, чтобы включить/отключить push-уведомления, зайдя в настройки-> уведомление-> имя приложения.</p>

<p>вы можете прочитать разрешения вашего приложения, используя <code>uiremotenotificationtype enabledtypes = [[uiapplication sharedapplication] enabledremotenotificationtypes];</code>, а затем выполнить побитовое выполнение и операцию с различными типами, чтобы увидеть, какие из них включены. вы также можете вызвать <code>unregisterforremotenotifications</code>, чтобы отключить уведомления. единственное, что вы не можете сделать, это включить уведомления, хотя вы можете направить пользователя.</p>

<p>мое требование состояло в том, чтобы включить и отключить pushnotificaton с помощью <code>uiswitch</code>. inorder, чтобы<strong> включить push-уведомление из кода </strong>использовать это внутри действия кнопки.</p><pre><code>[[uiapplication sharedapplication] registerforremotenotificationtypes: (uiremotenotificationtypebadge | uiremotenotificationtypesound | uiremotenotificationtypealert)]; </code></pre><p><strong> чтобы отключить </strong></p><pre><code>[[uiapplication sharedapplication] unregisterforremotenotifications]; nslog(@"unregistered for pushnotification"); </code></pre>

<p>когда вы даете разрешение в первый раз, токен устройства вашего iphone регистрируется на сервере apn, а затем вы можете получить push-уведомление. позже вы можете включить/отключить в настройках вашего устройства → уведомление → ваше приложение.</p>

<p>1. из вашего приложения нет, оно просто появляется в первый раз, когда пользователь открывает ваше приложение после его установки. если затем он решит разрешить его, он может активироваться из настроек устройства.</p><p>2.это можно сделать из приложения и настроек. если вы хотите отключить его из своего приложения, вы можете отправить токен устройства (который решит отключить push-уведомление) на свой сервер и сохранить его для ex. как «нет списка уведомлений», и при отправке полезной нагрузки вы игнорируете эти токены, чтобы они не получали уведомление.</p><p>3. я уже отвечаю.</p><p>удачи.</p>

<p>прагматически, можно включать и отключать push-уведомления, регистрируя и отменяя регистрацию push-уведомлений. </p><p><strong> включить push-уведомление: </strong></p><pre><code>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() } </code></pre><p><strong> методы делегирования </strong></p><pre><code>@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 } </code></pre><p><strong> отключить push-уведомление: </strong></p><pre><code>uiapplication.shared.unregisterforremotenotifications() </code></pre>

<p>вы можете использовать этот код для поддержки ios 9</p><pre><code> 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(@""); } } </code></pre><p>см. <a href="https://stackoverflow.com/questions/26091875/how-to-update-code-using-enabledremotenotificationtypes-because-it-is-not-suppo">как обновить код с помощью enabledremotenotificationtypes, потому что он «не поддерживается в ios 8»?</a> </p>