আইফোনটি নির্ধারণ করুন যদি ব্যবহারকারী পুশ বিজ্ঞপ্তিগুলি সক্ষম করে থাকে


207

ব্যবহারকারীরা সেটিংসের মাধ্যমে, আমার অ্যাপ্লিকেশনটির জন্য তাদের পুশ বিজ্ঞপ্তিগুলি সক্ষম বা অক্ষম করেছে কিনা তা নির্ধারণ করার একটি উপায় অনুসন্ধান করছি looking

উত্তর:


300

enabledRemoteNotificationsTypesমুখোশটি কল করুন এবং চেক করুন।

উদাহরণ স্বরূপ:

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types == UIRemoteNotificationTypeNone) 
   // blah blah blah

iOS8 এবং তারপরের:

[[UIApplication sharedApplication] isRegisteredForRemoteNotifications]

19
আইওএস 5: অ্যাপটি আপনার ফোনের নোটিফিকেশন সেন্টারে থাকুক না কেন আবহাওয়া নির্বিশেষে অ্যাপটি কী ধরণের ধরণের বিজ্ঞপ্তি ব্যবহার করে তা পরীক্ষা করে। আমি আমার অ্যাপ্লিকেশনটির জন্য পুশ বিজ্ঞপ্তিগুলি অক্ষম করেছি এবং এখনও টাইপ পেয়েছি == sound. শব্দ এবং সতর্কতা শৈলী অক্ষম করার পরে, আমি টাইপ পেয়েছি == UIRemoteNotificationsTypeNone।
কোয়ান্টাম্পোটাটো

4
কোয়ান্টাম্পোটাটো যেমন উল্লেখ করেছে, এই উত্তরটি আর সমস্ত ক্ষেত্রে পরিচালনা করে না এবং এটি একটি সম্পূর্ণ সমাধান নয়।
ডিবিডি

5
আপেল কি হচ্ছে? আমি আশা করি আমি এই বিষয়ে তাদের প্রতিক্রিয়া শুনতে পারি। এ জাতীয় প্রাথমিক তথ্য না জেনে আমরা কীভাবে দুর্দান্ত অ্যাপস বিকাশ করতে পারি ??
ওডেডেভেভ

15
@ জ্যাকবাউলিং - এর সমাধান iOS 8এবং উচ্চতরটি ভুল কারণ এটি ব্যবহারকারী কেবল দূরবর্তী বিজ্ঞপ্তির জন্য নিবন্ধিত হলেই এটি পরীক্ষা করে। ডকুমেন্টেশন অনুযায়ী:This method reflects only the successful completion of the remote registration process that begins when you call the registerForRemoteNotifications method. This method does not reflect whether remote notifications are actually available due to connectivity issues. The value returned by this method takes into account the user’s preferences for receiving remote notifications.
অপান

5
সুতরাং আমার মতে [[UIApplication sharedApplication] currentUserNotificationSettings];
আপনারও

99

কোয়ান্টাম্পোটোটোর ইস্যু:

যেখানে typesদেওয়া হয়

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

এক ব্যবহার করতে পারেন

if (types & UIRemoteNotificationTypeAlert)

পরিবর্তে

if (types == UIRemoteNotificationTypeNone) 

আপনাকে কেবল বিজ্ঞপ্তি সক্ষম আছে কিনা তা পরীক্ষা করার অনুমতি দেবে (এবং শব্দ, ব্যাজ, বিজ্ঞপ্তি কেন্দ্র ইত্যাদি সম্পর্কে চিন্তা করবেন না)। "সতর্কতা স্টাইল" "ব্যানার" বা "সতর্কতা " এ সেট করা থাকলে এবং অন্যান্য সেটিংস নির্বিশেষে "সতর্কতা শৈলী" "কিছুই নয়" তে সেট করা থাকলে কোডের প্রথম লাইনটি ( types & UIRemoteNotificationTypeAlert) ফিরে আসবে ।YESNO


এটি কোয়ান্টাম্পোট্যাটোর ইস্যুটির সমাধান করে না। তিনি কেবল সতর্কতাগুলির সাথেই উদ্বিগ্ন নন তবে তিনি উল্লেখ করেছেন যে ব্যবহারকারী সুনির্দিষ্ট রেমোটনোটিকেশনগুলির মাধ্যমে সনাক্ত করতে পারবেন না যে ব্যবহারকারী নোটিফিকেশন সেন্টারটি সেটিং চালু বা বন্ধ করেছে কিনা।
জোয়

8
আমার উত্তরটি সম্ভবত "অ্যাপ্লিকেশন বিজ্ঞপ্তি কেন্দ্রের মধ্যে রয়েছে কীভাবে তা নির্ধারণ করবেন" এর সরাসরি উত্তর দিতে পারে না, তবে এটি ব্যবহারকারী আপনার অ্যাপ্লিকেশনের জন্য বিজ্ঞপ্তিগুলি গ্রহণ করবে কিনা তা যাচাই করার একটি উপায় সরবরাহ করে , যা আমি মনে করি প্রশ্নের উত্তর হিসাবে এটি একটি উত্তর । আমি মনে করি না যে প্রাক্তনটিকে চেক করা সম্ভব।
টিম ক্যামবার

2
"যদি (প্রকারসমূহ এবং ইউআইআরমোটনোটিকেশনটাইপ এলার্ট)" এর কৌশলটি খুব ভাল।
নিমপ্লেটন

কৌশলটি কেন কাজ করে তা আপনি বুঝতে পেরেছেন! বিটওয়াইস অপারেটরগুলি খুব দরকারী এবং কোটায় বিটমাস্কগুলি প্রচলিত। পরীক্ষা করে দেখুন stackoverflow.com/a/3427633/1148702
টিম Camber

2
সুইফট 2 / এক্সকোড 7-তে বিটওয়াস অপারেশন ত্রুটির সাথে ব্যর্থ হয় বাইনারি অপারেটর '&' দুটি 'ইউআইইউজার-নোটিকেশন টাইপ' অপারেন্ডে প্রয়োগ করা যায় না । পরিবর্তে আপনি এতে ব্যবহার করতে পারেনgrantedSettings.types.contains(notificationType)
ফিলিপ অটো

54

আইওএসের সর্বশেষতম সংস্করণে এই পদ্ধতিটি এখন অবচয় করা হয়েছে। আইওএস 7 এবং আইওএস 8 ব্যবহার উভয়কে সমর্থন করতে:

UIApplication *application = [UIApplication sharedApplication];

BOOL enabled;

// Try to use the newer isRegisteredForRemoteNotifications otherwise use the enabledRemoteNotificationTypes.
if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)])
{
    enabled = [application isRegisteredForRemoteNotifications];
}
else
{
    UIRemoteNotificationType types = [application enabledRemoteNotificationTypes];
    enabled = types & UIRemoteNotificationTypeAlert;
}

2
স্থানীয় বিজ্ঞপ্তিগুলি সম্পর্কে কী? আইওএস 8 এখন ব্যবহারকারীকে তাদের অনুমতি দেওয়ার প্রয়োজন। তবে পরে কীভাবে চেক করবেন যে এগুলি অনুমোদিত ছিল কি না?
ফ্রেডেরিক অ্যাডা

@FredA। চেক UserNotifications। দুর্ভাগ্যক্রমে আমার কাছে এখন পুরো উত্তর নেই।
মাজিওদ


3
সুইফটে আমি সক্ষম = প্রকার ও ইউআইআরমোটনোটিকেশন টাইপআলার্ট করতে পারি না। ত্রুটি: ধরনের bool নয়
grandagile

53

Swift4.0, iOS11 এর জন্য আপডেট হওয়া কোড

import UserNotifications

UNUserNotificationCenter.current().getNotificationSettings { (settings) in
   print("Notification settings: \(settings)")
   guard settings.authorizationStatus == .authorized else { return }

   //Not authorised 
   UIApplication.shared.registerForRemoteNotifications()
}

Swift3.0, iOS10 এর জন্য কোড

    let isRegisteredForRemoteNotifications = UIApplication.shared.isRegisteredForRemoteNotifications
    if isRegisteredForRemoteNotifications {
        // User is registered for notification
    } else {
        // Show alert user is not registered for notification
    }

আইওএস 9 থেকে, সুইফট ২.০ ইউআইরিমোটনোটিকেশন টাইপটি অবচিত করা হয়েছে, নিম্নলিখিত কোড ব্যবহার করুন

let notificationType = UIApplication.shared.currentUserNotificationSettings!.types
if notificationType == UIUserNotificationType.none {
        // Push notifications are disabled in setting by user.
    }else{
  // Push notifications are enabled in setting by user.

}

কেবল পুশ বিজ্ঞপ্তিগুলি সক্ষম কিনা তা পরীক্ষা করে দেখুন

    if notificationType == UIUserNotificationType.badge {
        // the application may badge its icon upon a notification being received
    }
    if notificationType == UIUserNotificationType.sound {
        // the application may play a sound upon a notification being received

    }
    if notificationType == UIUserNotificationType.alert {
        // the application may display an alert upon a notification being received
    }

33

নীচে আপনি iOS8 এবং iOS7 (এবং নিম্ন সংস্করণ) উভয়কে কভার করে এমন একটি সম্পূর্ণ উদাহরণ পাবেন। দয়া করে নোট করুন যে iOS8 এর পূর্বে আপনি "রিমোট নোটিফিকেশনগুলি অক্ষম" এবং "কেবলমাত্র লকস্ক্রিনে সক্ষম হওয়া সক্ষম" এর মধ্যে পার্থক্য করতে পারবেন না ।

BOOL remoteNotificationsEnabled = false, noneEnabled,alertsEnabled, badgesEnabled, soundsEnabled;

if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
    // iOS8+
    remoteNotificationsEnabled = [UIApplication sharedApplication].isRegisteredForRemoteNotifications;

    UIUserNotificationSettings *userNotificationSettings = [UIApplication sharedApplication].currentUserNotificationSettings;

    noneEnabled = userNotificationSettings.types == UIUserNotificationTypeNone;
    alertsEnabled = userNotificationSettings.types & UIUserNotificationTypeAlert;
    badgesEnabled = userNotificationSettings.types & UIUserNotificationTypeBadge;
    soundsEnabled = userNotificationSettings.types & UIUserNotificationTypeSound;

} else {
    // iOS7 and below
    UIRemoteNotificationType enabledRemoteNotificationTypes = [UIApplication sharedApplication].enabledRemoteNotificationTypes;

    noneEnabled = enabledRemoteNotificationTypes == UIRemoteNotificationTypeNone;
    alertsEnabled = enabledRemoteNotificationTypes & UIRemoteNotificationTypeAlert;
    badgesEnabled = enabledRemoteNotificationTypes & UIRemoteNotificationTypeBadge;
    soundsEnabled = enabledRemoteNotificationTypes & UIRemoteNotificationTypeSound;
}

if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
    NSLog(@"Remote notifications enabled: %@", remoteNotificationsEnabled ? @"YES" : @"NO");
}

NSLog(@"Notification type status:");
NSLog(@"  None: %@", noneEnabled ? @"enabled" : @"disabled");
NSLog(@"  Alerts: %@", alertsEnabled ? @"enabled" : @"disabled");
NSLog(@"  Badges: %@", badgesEnabled ? @"enabled" : @"disabled");
NSLog(@"  Sounds: %@", soundsEnabled ? @"enabled" : @"disabled");

6
ইউজারনোটিকেশনসটিটিংস.টিপস এবং ইউআইইউজার নোটফিকেশন টাইপনিউন সর্বদা মিথ্যা হবে, যেহেতু ইউআই ইউজারনোটাইফিকেশন টাইপনোন একটি খালি বিট মাস্ক, এটি অন্যান্য বিটের অনুপস্থিতি। কারও জন্য আপনি কেবল সমতা পরীক্ষা করতে চান না।
dberwick

25

সুইফট 3+

    if #available(iOS 10.0, *) {
        UNUserNotificationCenter.current().getNotificationSettings(completionHandler: { (settings: UNNotificationSettings) in
            // settings.authorizationStatus == .authorized
        })
    } else {
        return UIApplication.shared.currentUserNotificationSettings?.types.contains(UIUserNotificationType.alert) ?? false
    }

আইওএস 10 + এর জন্য আরএক্সউইফট পর্যবেক্ষণযোগ্য সংস্করণ:

import UserNotifications
extension UNUserNotificationCenter {
    static var isAuthorized: Observable<Bool> {
        return Observable.create { observer in
            DispatchQueue.main.async {
                current().getNotificationSettings(completionHandler: { (settings: UNNotificationSettings) in
                    if settings.authorizationStatus == .authorized {
                        observer.onNext(true)
                        observer.onCompleted()
                    } else {
                        current().requestAuthorization(options: [.badge, .alert, .sound]) { (granted, error) in
                            observer.onNext(granted)
                            observer.onCompleted()
                        }
                    }
                })
            }
            return Disposables.create()
        }
    }
}

1
তুমি আমার দিন বাঁচাও :)
চেতন ডোবারিয়া

1
ধন্যবাদ আমি এক ঘন্টার জন্য এটি অনুসন্ধান ছিল।
চঞ্চল ওয়ার্ডে

4
getNotificationSettings(...)
অবিচ্ছিন্ন

17

আইওএস 8 এবং নিম্ন উভয়কেই সমর্থন করার চেষ্টা করার ক্ষেত্রে isRegisteredForRemoteNotificationsকেভিনের পরামর্শ মতো আমার বেশি ভাগ্য হয়নি । পরিবর্তে আমি ব্যবহার করেছি currentUserNotificationSettings, যা আমার পরীক্ষায় দুর্দান্ত কাজ করেছে।

+ (BOOL)notificationServicesEnabled {
    BOOL isEnabled = NO;

    if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]){
        UIUserNotificationSettings *notificationSettings = [[UIApplication sharedApplication] currentUserNotificationSettings];

        if (!notificationSettings || (notificationSettings.types == UIUserNotificationTypeNone)) {
            isEnabled = NO;
        } else {
            isEnabled = YES;
        }
    } else {
        UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
        if (types & UIRemoteNotificationTypeAlert) {
            isEnabled = YES;
        } else{
            isEnabled = NO;
        }
    }

    return isEnabled;
}

অ্যাপ্লিকেশন টাটকা ইনস্টল করা হলে এটি প্রযোজ্য না। পদ্ধতিটি সর্বদা NO ফেরত দেবে, এবং পুশ বিজ্ঞপ্তিগুলির জন্য পপ আপের অনুমতি কখনও উপস্থিত হবে না। সুতরাং, ডিভাইসের সেটিংসে, আপনি যদি সেই অ্যাপ্লিকেশানের জন্য বিজ্ঞপ্তি সেটিংস পরিবর্তন করতে চান (অনুমতি দিন / অনুমতি দিন) তবে অ্যাপটি উপস্থিত হবে না। এই সমস্যাটিকে ঘিরে কাজ করার জন্য কারও কি ধারণা আছে?
tyegah123

কোনও অ্যাপ্লিকেশন মোছার পরেও বিজ্ঞপ্তি সেটিংস বহাল থাকে। সুতরাং আপনি যদি অ্যাপ্লিকেশনটি সম্পূর্ণ নতুন হন তবে এই পদ্ধতিটি কার্যকর হবে। যদি আপনার অ্যাপ্লিকেশনটি মুছে ফেলা হয় তবে তারপরে পুনরায় ইনস্টল করা হয়, তবে অনুমতিগুলি এখনও সিস্টেমে রয়েছে এবং অ্যাপল আপনাকে অনুমতিগুলির জন্য পুনরায় জিজ্ঞাসার সুযোগ দেয় না।
শাহীন গিয়াসি

আমি কিছু অপ্রয়োজনীয় কোড দেখতে পাচ্ছি: isEnabled = NO;আপনার ifক্ষেত্রে এটি যেমন প্রয়োজন হয় তেমন প্রয়োজন হয় নাNO
জ্যাস্পার

15

দুর্ভাগ্যক্রমে এই প্রদত্ত সমাধানগুলির কোনওটিই সত্যিই সমস্যার সমাধান করতে পারে না কারণ প্রাসঙ্গিক তথ্য সরবরাহ করার ক্ষেত্রে এপিআইগুলির গুরুতর অভাব হয়। তবে আপনি কয়েকটি অনুমান করতে পারেন currentUserNotificationSettings(আইওএস 8 +) ব্যবহার করে প্রশ্নের উত্তরটি দেওয়ার জন্য এটি কেবল বর্তমান আকারে যথেষ্ট নয়। যদিও এখানে অনেকগুলি সমাধান মনে হয় যে এটি হয় বা isRegisteredForRemoteNotificationsএটির একটি নির্দিষ্ট উত্তর এটি সত্যই নয়।

এই বিবেচনা:

সঙ্গে isRegisteredForRemoteNotificationsডকুমেন্টেশন পদ বলে:

অ্যাপ্লিকেশনটি বর্তমানে সিস্টেমভিত্তিক যে কোনও সেটিংস বিবেচনায় নিয়ে দূরবর্তী বিজ্ঞপ্তির জন্য নিবন্ধিত থাকলে হ্যাঁ প্রত্যাবর্তন করে ...

তবে আপনি যদি NSLogআচরণটি পর্যালোচনা করার জন্য যদি আপনার অ্যাপের প্রতিনিধিটির কাছে কোনও সহজভাবে ফেলে দেন তবে এটি পরিষ্কার হয়ে যায় যে এটি আমাদের প্রত্যাশা করে যেভাবে কাজ করবে তা আচরণ করে না। এটি আসলে এই অ্যাপ / ডিভাইসের জন্য সক্রিয় করা দূরবর্তী বিজ্ঞপ্তিগুলির সাথে সরাসরি সম্পর্কিত। একবার প্রথমবার সক্রিয় হয়ে গেলে এটি সর্বদা ফিরে আসবে YES। এমনকি সেটিংসে (বিজ্ঞপ্তিগুলি) এগুলি বন্ধ করে দেওয়ার ফলে এটি পুনরায় ফিরে আসার YESকারণ হবে কারণ আইওএস 8 হিসাবে, কোনও অ্যাপ্লিকেশন দূরবর্তী বিজ্ঞপ্তিগুলির জন্য নিবন্ধন করতে পারে এবং এমনকি ব্যবহারকারীকে বিজ্ঞপ্তি সক্ষম না করে এমন কোনও ডিভাইসে প্রেরণ করতে পারে, তারা কেবল সতর্কতাগুলি না করে, ব্যাজগুলি এবং সাউন্ডটি ব্যবহারকারী চালু না করেই করে। নীরব বিজ্ঞপ্তি এমন কিছুর একটি ভাল উদাহরণ যা আপনি বিজ্ঞপ্তি বন্ধ করে দিয়েও চালিয়ে যেতে পারেন।

যতদূর currentUserNotificationSettingsএটি চারটি জিনিসের একটিকে নির্দেশ করে:

সতর্কতাগুলি ব্যাজে রয়েছে সাউন্ড চলছে কোনওটি চলছে না।

এটি আপনাকে অন্যান্য কারণ বা নোটিফিকেশন স্যুইচ সম্পর্কে নিজেই কোনও ইঙ্গিত দেয় না।

কোনও ব্যবহারকারী আসলে ব্যাজ, শব্দ এবং সতর্কতাগুলি বন্ধ করতে পারে তবে এখনও লকস্ক্রিনে বা বিজ্ঞপ্তি কেন্দ্রে প্রদর্শন করতে পারে। এই ব্যবহারকারীর এখনও পুশ বিজ্ঞপ্তিগুলি গ্রহণ করা উচিত এবং লক স্ক্রিনে এবং বিজ্ঞপ্তি কেন্দ্রে সেগুলি উভয়ই দেখতে সক্ষম হওয়া উচিত। তাদের বিজ্ঞপ্তি স্যুইচ আছে। currentUserNotificationSettingsতবে ফিরে আসবে: সেক্ষেত্রে UIUserNotificationTypeNone। এটি ব্যবহারকারীদের প্রকৃত সেটিংসের সত্যই নির্দেশক নয়।

কেউ কিছু অনুমান করতে পারেন:

  • যদি isRegisteredForRemoteNotificationsতা হয় NOতবে আপনি ধরে নিতে পারেন যে এই ডিভাইসটি রিমোট নোটিফিকেশনের জন্য সফলভাবে নিবন্ধিত হয়নি।
  • পরে দূরবর্তী বিজ্ঞপ্তির জন্য একটি কলব্যাক নিবন্ধনের প্রথম সময় application:didRegisterUserNotificationSettings:এই সময়ে ব্যবহারকারী বিজ্ঞপ্তি সেটিংস ধারণকারী যেহেতু এই প্রথমবার ব্যবহারকারী সেটিংস নিবন্ধিত হয়েছে তৈরি করা হয় উচিত ইঙ্গিত কি ব্যবহারকারী অনুমতির অনুরোধ পরিপ্রেক্ষিতে নির্বাচন করেছেন। সেটিংসটি যদি অন্য কোনও কিছুর সমতুল্য হয়: UIUserNotificationTypeNoneতবে পুশ অনুমতি দেওয়া হয়েছিল, অন্যথায় এটি অস্বীকার করা হয়েছিল। এর কারণ হ'ল আপনি দূরবর্তী নিবন্ধকরণ প্রক্রিয়া শুরু করার মুহুর্ত থেকে ব্যবহারকারী কেবল নিবন্ধকরণ প্রক্রিয়া চলাকালীন সেটিংস সেটিংস হ'ল গ্রহণযোগ্যতার প্রাথমিক সেটিংসের সাথে কেবল গ্রহণযোগ্যতা বা প্রত্যাখ্যান করার ক্ষমতা রাখে।

8

উত্তরটি সম্পূর্ণ করতে, এটি এমন কিছু কাজ করতে পারে ...

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
switch (types) {
   case UIRemoteNotificationTypeAlert:
   case UIRemoteNotificationTypeBadge:
       // For enabled code
       break;
   case UIRemoteNotificationTypeSound:
   case UIRemoteNotificationTypeNone:
   default:
       // For disabled code
       break;
}

সম্পাদনা: এটি সঠিক নয়। যেহেতু এগুলি বিট-ওয়াইফ স্টাফ, এটি একটি স্যুইচ দিয়ে কাজ করবে না, তাই আমি এটি ব্যবহার করে শেষ করেছি:

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
UIRemoteNotificationType typesset = (UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge);
if((types & typesset) == typesset)
{
    CeldaSwitch.chkSwitch.on = true;
}
else
{
    CeldaSwitch.chkSwitch.on = false;
}

আমি (আমার অবস্থার জন্য) সাউন্ড নোটিফিকেশনগুলি সক্ষম না হিসাবে বিবেচনা করেছি (যেহেতু আমার অ্যাপ্লিকেশন কার্যকারিতার জন্য সেগুলি সক্ষম করার জন্য আমার পাঠ্য প্রয়োজন)
pojomx

5

IOS7 এর জন্য এবং আপনার অবশ্যই ব্যবহার করা উচিত enabledRemoteNotificationTypesএবং এটি পরীক্ষা করা উচিত কিনা এটি সমান (বা আপনি যা চান তার উপর ভিত্তি করে সমান হয় না) UIRemoteNotificationTypeNone

তবে আইওএস 8-র ক্ষেত্রে এটি কেবলমাত্র উপরের মতো অনেকগুলি রাজ্যের সাথে চেক করা সর্বদা যথেষ্ট নয়isRegisteredForRemoteNotificationsapplication.currentUserNotificationSettings.typesআপনারও সমান (বা আপনি যা চান তার উপর ভিত্তি করে সমান হয় না) তাও পরীক্ষা করা উচিত UIUserNotificationTypeNone!

isRegisteredForRemoteNotificationscurrentUserNotificationSettings.typesরিটার্ন হলেও সত্য হতে পারে UIUserNotificationTypeNone


5

iOS8 + (OBJECTIVE C)

#import <UserNotifications/UserNotifications.h>


[[UNUserNotificationCenter currentNotificationCenter]getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {

    switch (settings.authorizationStatus) {
          case UNAuthorizationStatusNotDetermined:{

            break;
        }
        case UNAuthorizationStatusDenied:{

            break;
        }
        case UNAuthorizationStatusAuthorized:{

            break;
        }
        default:
            break;
    }
}];

4
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types & UIRemoteNotificationTypeAlert)
    // blah blah blah
{
    NSLog(@"Notification Enabled");
}
else
{
    NSLog(@"Notification not enabled");
}

এখানে আমরা ইউআইআইএপ্লিকেশন থেকে ইউআইআরমোটনোটিকেশন টাইপ পাই। এটি সেটিং-এ এই অ্যাপ্লিকেশনটির পুশ বিজ্ঞপ্তির অবস্থা উপস্থাপন করে, আপনি সহজেই এর ধরণটি সহজে পরীক্ষা করতে পারেন check


3
এই কোডটি কী করে দয়া করে ব্যাখ্যা করুন, লিখন কোডটি কেবল প্রশ্নের উত্তর দেয় না।
ব্যাটি

4

আমি আইওএস 10 এবং সমাধান @Shaheen Ghiassy দ্বারা প্রদান কিন্তু বঞ্চনা ইস্যু খুঁজে ব্যবহার করে উপরে উল্লেখিত সমর্থন করার জন্য চেষ্টা enabledRemoteNotificationTypes। সুতরাং, আমি যে সমাধানটি আইওএস-এ অবমুক্ত করা হয়েছে isRegisteredForRemoteNotificationsতার পরিবর্তে ব্যবহার করে enabledRemoteNotificationTypesসন্ধান করব Bel নীচে আমার আপডেট সমাধানটি যা আমার পক্ষে নিখুঁতভাবে কাজ করেছে:

- (BOOL)notificationServicesEnabled {
    BOOL isEnabled = NO;
    if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]){
        UIUserNotificationSettings *notificationSettings = [[UIApplication sharedApplication] currentUserNotificationSettings];

        if (!notificationSettings || (notificationSettings.types == UIUserNotificationTypeNone)) {
            isEnabled = NO;
        } else {
            isEnabled = YES;
        }
    } else {

        if ([[UIApplication sharedApplication] isRegisteredForRemoteNotifications]) {
            isEnabled = YES;
        } else{
            isEnabled = NO;
        }
    }
    return isEnabled;
}

এবং আমরা সহজেই এই ফাংশনটি কল করতে পারি এবং এর Boolমানটি অ্যাক্সেস করতে পারি এবং এটির মাধ্যমে স্ট্রিং ভ্যালুতে রূপান্তর করতে পারি:

NSString *str = [self notificationServicesEnabled] ? @"YES" : @"NO";

আশা করি এটি অন্যকেও সহায়তা করবে :) শুভ কোডিং।


3

আইওএস 7 পর্যন্ত জ্যাকের উত্তর পুরোপুরি সঠিক হলেও আইওএস 8 আসার পর থেকে এটি বদলে গেছে। কারণ সক্ষমযুক্ত রিমোটনোটিকেশন টাইপগুলি আইওএস 8 এর পরে অবচয় করা হয়েছে। আইওএস 8 এবং তারপরে আপনার রেজিস্টার্ড ফর রেমোটনোটিকেশন ব্যবহার করতে হবে ।

  • আইওএস 7 এবং এর আগে -> সক্ষমযুক্ত রিমোটনোটিকেশন টাইপগুলি ব্যবহার করুন
  • আইওএস 8 এবং তারপরে -> isRegectedforRemoteNotifications ব্যবহার করুন।

2

এই সুইফটি সমাধানটি আমার জন্য ভাল কাজ করেছে ( iOS8 + ),

পদ্ধতি :

func isNotificationEnabled(completion:@escaping (_ enabled:Bool)->()){
    if #available(iOS 10.0, *) {
        UNUserNotificationCenter.current().getNotificationSettings(completionHandler: { (settings: UNNotificationSettings) in
            let status =  (settings.authorizationStatus == .authorized)
            completion(status)
        })
    } else {
        if let status = UIApplication.shared.currentUserNotificationSettings?.types{
            let status = status.rawValue != UIUserNotificationType(rawValue: 0).rawValue
            completion(status)
        }else{
            completion(false)
        }
    }
}

ব্যবহার :

isNotificationEnabled { (isEnabled) in
            if isEnabled{
                print("Push notification enabled")
            }else{
                print("Push notification not enabled")
            }
        }

সূত্র


0

Re:

এটা সঠিক

if (types & UIRemoteNotificationTypeAlert)

কিন্তু নিম্নলিখিতটিও সঠিক! (ইউআইআরএমোটনোটিকেশন টাইপনোন 0 হিসাবে রয়েছে)

if (types == UIRemoteNotificationTypeNone) 

নিম্নলিখিত দেখুন

NSLog(@"log:%d",0 & 0); ///false
NSLog(@"log:%d",1 & 1); ///true
NSLog(@"log:%d",1<<1 & 1<<1); ///true
NSLog(@"log:%d",1<<2 & 1<<2); ///true
NSLog(@"log:%d",(0 & 0) && YES); ///false
NSLog(@"log:%d",(1 & 1) && YES); ///true
NSLog(@"log:%d",(1<<1 & 1<<1) && YES); ///true
NSLog(@"log:%d",(1<<2 & 1<<2) && YES); ///true

0

Xamarin.ios এ এটি কীভাবে করবেন তা এখানে।

public class NotificationUtils
{
    public static bool AreNotificationsEnabled ()
    {
        var settings = UIApplication.SharedApplication.CurrentUserNotificationSettings;
        var types = settings.Types;
        return types != UIUserNotificationType.None;
    }
}

আপনি যদি আইওএস 10+ সমর্থন করেন তবে কেবল ইউএনউজারনোটফিকেশন সেন্টার পদ্ধতিতে যান।


0

জামারিনে উপরের সমস্ত সমাধান আমার পক্ষে কাজ করে না। পরিবর্তে এটিই আমি ব্যবহার করি:

public static bool IsRemoteNotificationsEnabled() {
    return UIApplication.SharedApplication.CurrentUserNotificationSettings.Types != UIUserNotificationType.None;
}

আপনি সেটিংসে বিজ্ঞপ্তি স্থিতি পরিবর্তন করার পরে এটি একটি সরাসরি আপডেটও পাচ্ছে।


-1

@ জ্যাকবাউলিংয়ের সমাধান ( https://stackoverflow.com/a/1535427/2298002 ) থেকে তৈরি সম্পূর্ণ সহজ অনুলিপি এবং পেস্ট কোড

এটি ব্যবহারকারীকে আপনার অ্যাপ্লিকেশন সেটিংসে নিয়ে আসবে এবং তাদের তাত্ক্ষণিকভাবে সক্ষম করার অনুমতি দেবে

আমি অবস্থান পরিষেবাদি সক্ষম করা আছে কিনা তা যাচাই করার জন্য একটি সমাধানে যোগ করেছি (এবং সেটিংসেও এনেছে)

// check if notification service is enabled
+ (void)checkNotificationServicesEnabled
{
    if (![[UIApplication sharedApplication] isRegisteredForRemoteNotifications])
    {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Notification Services Disabled!"
                                                            message:@"Yo don't mess around bro! Enabling your Notifications allows you to receive important updates"
                                                           delegate:self
                                                  cancelButtonTitle:@"Cancel"
                                                  otherButtonTitles:@"Settings", nil];

        alertView.tag = 300;

        [alertView show];

        return;
    }
}

// check if location service is enabled (ref: https://stackoverflow.com/a/35982887/2298002)
+ (void)checkLocationServicesEnabled
{
    //Checking authorization status
    if (![CLLocationManager locationServicesEnabled] || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied)
    {

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Location Services Disabled!"
                                                            message:@"You need to enable your GPS location right now!!"
                                                           delegate:self
                                                  cancelButtonTitle:@"Cancel"
                                                  otherButtonTitles:@"Settings", nil];

        //TODO if user has not given permission to device
        if (![CLLocationManager locationServicesEnabled])
        {
            alertView.tag = 100;
        }
        //TODO if user has not given permission to particular app
        else
        {
            alertView.tag = 200;
        }

        [alertView show];

        return;
    }
}

// handle bringing user to settings for each
+ (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{

    if(buttonIndex == 0)// Cancel button pressed
    {
        //TODO for cancel
    }
    else if(buttonIndex == 1)// Settings button pressed.
    {
        if (alertView.tag == 100)
        {
            //This will open ios devices location settings
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"]];
        }
        else if (alertView.tag == 200)
        {
            //This will open particular app location settings
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
        }
        else if (alertView.tag == 300)
        {
            //This will open particular app location settings
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
        }
    }
}

GLHF!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.