আইওএস অ্যাপ্লিকেশন: কীভাবে বিজ্ঞপ্তিগুলি সাফ করবেন?


109

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

আমি পোস্টগুলিতে এসে পৌঁছেছি যেখানে লোকেরা setApplicationIconBadgeNumberবিজ্ঞপ্তিগুলি সাফ করার জন্য একটি শূন্য-মানটিতে কল করছে। এটি আমার কাছে খুব অদ্ভুত বলে মনে হচ্ছে, তাই আমি বিশ্বাস করি যে অন্য কোনও সমাধানের উপস্থিতি থাকতে পারে?

EDIT1:

বিজ্ঞপ্তিগুলি সাফ করতে আমার কিছু সমস্যা হচ্ছে। আমার কোডটি এখানে দেখুন:

- (void) clearNotifications {
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if (launchOptions != nil)
    {
        NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
        if (dictionary != nil)
        {
            NSLog(@"Launched from push notification: %@", dictionary);

            [self clearNotifications];
        }
    }

    return YES;
}

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{    
    NSLog(@"Received notification: %@", userInfo);
    [self clearNotifications];
}

আমি এক্সকোডের মাধ্যমে অ্যাপটি চালাচ্ছি। যখন অ্যাপ্লিকেশনটি ছোট করা হয় এবং আমি বিজ্ঞপ্তি কেন্দ্রটিতে বিজ্ঞপ্তিটি ব্যবহার করে অ্যাপ শুরু করি, তখন আমি লগটিতে দেখতে পারি যে didReceiveRemoteNotificationডাকা হয় এবং ব্রেকপয়েন্টগুলি ব্যবহার করে আমি দেখতে পারি যে clearNotificationsদৌড়ে গেছে। তবে এখনও বিজ্ঞপ্তিটি বিজ্ঞপ্তি কেন্দ্রে ঝুলছে। কেন?

উত্তর:


157

সম্ভবত নোটিফিকেশন সেন্টার তুলনামূলকভাবে নতুন বৈশিষ্ট্য হওয়ায়, অ্যাপল প্রয়োজনীয়ভাবে বিজ্ঞপ্তিগুলি সাফ করার জন্য পুরো নতুন দৃষ্টান্তটিকে ধাক্কা দিতে চায় নি। সুতরাং পরিবর্তে, তারা [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];নোটিফিকেশনগুলি সাফ করার জন্য বহু উদ্দেশ্য নিয়েছে। এটি কিছুটা অদ্ভুত বলে মনে হতে পারে এবং অ্যাপল ভবিষ্যতে এটি করার জন্য আরও স্বজ্ঞাত উপায় প্রদান করতে পারে তবে আপাতত এটি সরকারী উপায়।

নিজেই, আমি এই স্নিপেট ব্যবহার করি:

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];

যা বিজ্ঞপ্তি কেন্দ্র থেকে অ্যাপের সমস্ত বিজ্ঞপ্তিগুলি সাফ করতে কখনই ব্যর্থ হয়।


cancelAllLocalNotifications অবচিত - developer.apple.com/documentation/uikit/uiapplication/... আপনি ব্যবহার করতে হবে let center = UNUserNotificationCenter.current() center.removeAllDeliveredNotifications() // To remove all delivered notifications stackoverflow.com/a/40397907/1155650
রোহিত Vipin ম্যাথুস

119

কেবল পিস্পেরিনির উত্তরে প্রসারিত করতে। তিনি যেমন উল্লেখ করেছেন আপনাকে আপনার application:didFinishLaunchingWithOptions:পদ্ধতিতে নিম্নলিখিত কোড যুক্ত করতে হবে ;

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];

আপনি এছাড়াও বৃদ্ধি প্রয়োজন তারপর আপনার ব্যাজ হ্রাস application:didReceiveRemoteNotification:পদ্ধতি যদি আপনি বার্তা কেন্দ্র থেকে বার্তা একটি বিজ্ঞপ্তি বার্তা কেন্দ্র টিপে থেকে যে যখন একজন ব্যবহারকারী প্রবেশ আপনি অ্যাপ্লিকেশন পরিষ্কার তাই চেষ্টা করছেন হবে এছাড়াও পরিষ্কার, অর্থাত;

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];

আমি মনে করি বাতিল সমস্ত স্থানীয় নোটিকেশন প্রয়োজন হয় না that এই লাইনটি ছাড়া আমার জন্য কাজ করা হয়েছে
মুরালি

@ মুরালি যে স্থানীয় নোটিফিকেশন ব্যবহার করে তা আপনার উপর নির্ভর করবে না ...?
আলেজান্দ্রো ইভান

1
আপডেট :: "বাতিলআলোলোকনোটিকেশনগুলি 'হ্রাস করা হয়েছে: প্রথমে আইওএস 10.0 এ অবহেলা করা হয়েছে" সুতরাং আপনার অ্যাপ্লিকেশন সংস্করণটি আইওএস 10.0 এর চেয়ে বেশি হলে আপনার এই ইউএনউজারনোটফিকেশন সেন্টার * কেন্দ্র = [UNUserNotificationsCenter কারেন্ট নোটিকেশন সেন্টার] ব্যবহার করা উচিত; [কেন্দ্র মুছে ফেলুন AllDeliveredNotifications]; [কেন্দ্র সরানঅ্যালপেন্ডিংনিটফিকেশন অনুরোধ];
ব্যবহারকারী 18474728

21

অ্যাপ্লিকেশনডিবিকোম্যাকটিভের ক্লিয়ারনোটিকেশনগুলিতে একটি কল যুক্ত করাও বুদ্ধিমান হতে পারে যাতে অ্যাপ্লিকেশনটি পটভূমিতে থাকে এবং ফিরে আসে সে ক্ষেত্রে বিজ্ঞপ্তিগুলিও সাফ হয়ে যায়।

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [self clearNotifications];
}

15

আইওএস 10 (সুইফট 3) এর জন্য আপডেট

আইওএস 10 অ্যাপ্লিকেশনগুলিতে সমস্ত স্থানীয় বিজ্ঞপ্তিগুলি সাফ করার জন্য আপনার নিম্নলিখিত কোডটি ব্যবহার করা উচিত:

import UserNotifications

...

if #available(iOS 10.0, *) {
    let center = UNUserNotificationCenter.current()
    center.removeAllPendingNotificationRequests() // To remove all pending notifications which are not delivered yet but scheduled.
    center.removeAllDeliveredNotifications() // To remove all delivered notifications
} else {
    UIApplication.shared.cancelAllLocalNotifications()
}

এই কোডটি আইওএস 10.x এবং আইওএসের সমস্ত পূর্ববর্তী সংস্করণগুলিতে স্থানীয় বিজ্ঞপ্তিগুলি সাফ করার জন্য পরিচালনা করে। import UserNotificationsআইওএস 10.x কোডটির জন্য আপনার প্রয়োজন হবে ।


9

আপনার যদি নির্ধারিত স্থানীয় বিজ্ঞপ্তিগুলি মুলতুবি থেকে cancelAllLocalNotificationsথাকে এবং বিজ্ঞপ্তি কেন্দ্রের পুরানোগুলি সাফ করতে ব্যবহার করতে না চান , আপনি নিম্নলিখিতগুলিও করতে পারেন:

[UIApplication sharedApplication].scheduledLocalNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;

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


1
এটি আইওএস-এ আমার জন্য আকর্ষণীয় কাজ করে 9.। আমি আমার সমস্ত বিজ্ঞপ্তিগুলি বাতিল করতে চাইনি কারণ তারা সময়ের সাথে পুনরাবৃত্তি করে (দৈনিক বা সাপ্তাহিক)। এবং এইভাবে আমি এগুলি মুছে না রেখে সমস্ত জিনিস সাফ করি।
সুপারপুসিও

1
আমি এখনও পর্যন্ত সেরা সমাধান দেখেছি। আইওএস 8 এ কাজ করে যে কেউ জানেন?
duncanc4

@ duncanc4 গতবার আমি এটি iOS 8 এ যাচাই করে দেখেছিলাম।
ospr

অ্যাপের মধ্যে কোথায় আপনি এটি কল করবেন?
অ্যালেক্স জাভাটোন

অ্যালেক্স, যখনই আপনাকে বিজ্ঞপ্তি কেন্দ্রের বিজ্ঞপ্তিগুলি সাফ করার দরকার পড়ে তখনই আপনাকে এটিকে কল করা উচিত। আমি এটিকে আমার অ্যাপডেলিগেট applicationDidBecomeActive:এবং application:didReceiveLocalNotification:পদ্ধতি উভয়ই বলি ।
ospr

3

সুইফটে আমি আমার অ্যাপডেলিগেটের মধ্যে নিম্নলিখিত কোডগুলি ব্যবহার করছি:

func applicationDidBecomeActive(application: UIApplication) {
    application.applicationIconBadgeNumber = 0
    application.cancelAllLocalNotifications()
}

3

আপনি যদি এখানে বিপরীতে ভাবছেন (আমি যেমন ছিলাম) তবে এই পোস্টটি আপনার জন্য হতে পারে।

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

ভাগ্যক্রমে নেতিবাচক 1 কৌশলটি করে:

[UIApplication sharedApplication].applicationIconBadgeNumber = -1;

1
এটি iOS9 এ আপনার জন্য কাজ করে? 0 বা টু -1 এ ব্যাজ সেট করার সাথে আমি কোনও পার্থক্য লক্ষ্য করিনি। এটি এখনও আমার ক্ষেত্রে সমস্ত দূরবর্তী বিজ্ঞপ্তি সাফ করে।
আলেক্সিভিএমপি

হ্যাঁ, আমি আসলে আমার অ্যাপ্লিকেশনটির সাথে আবার লক্ষ্য করা শুরু করেছি; আমার কি ধারণা নেই যে কী বদলেছে।
তাহো ওয়ালভারাইন

অ্যাপল একরকম সিদ্ধান্ত নিয়েছে যেহেতু অ্যাপল কোনও ব্যাজ
নম্বরযুক্ত

1

সম্ভবত নির্ধারিত অ্যালার্ম এবং অপরিচ্ছন্ন অ্যাপ্লিকেশন আইকন ব্যাজ রয়েছে।

NSArray *scheduledLocalNotifications = [application scheduledLocalNotifications];
NSInteger applicationIconBadgeNumber = [application applicationIconBadgeNumber];

[application cancelAllLocalNotifications];
[application setApplicationIconBadgeNumber:0];

for (UILocalNotification* scheduledLocalNotification in scheduledLocalNotifications) {
    [application scheduleLocalNotification:scheduledLocalNotification];
}
[application setApplicationIconBadgeNumber:applicationIconBadgeNumber];

0

আপনি ভবিষ্যতে বারবার বিজ্ঞপ্তিগুলি পরে, আপনি এই বিজ্ঞপ্তিগুলি বাতিল করতে চান না, আপনি বিজ্ঞপ্তি কেন্দ্রে আইটেমটি দ্বারা মুছে ফেলতে পারেন:

func clearNotificationCenter() {
    UIApplication.sharedApplication().applicationIconBadgeNumber = 1
    UIApplication.sharedApplication().applicationIconBadgeNumber = 0
}

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

[UIApplication sharedApplication].scheduledLocalNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;

0

আপনি যখন আপনার অ্যাপ্লিকেশন থেকে লগআউট করবেন, তখন আপনার লগআউট বোতাম ক্লিক পদ্ধতিতে আপনাকে নীচের কোডের লাইনটি ব্যবহার করতে হবে।

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];

[[UIApplication sharedApplication] cancelAllLocalNotifications];

এবং এটি আমার অ্যাপ্লিকেশনটিতে পুরোপুরি কাজ করে।


0

আপনার AppDelegate applicationDidBecomeActiveপদ্ধতিতে আপনাকে নীচের কোড যুক্ত করতে হবে ।

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];

-1

এখান থেকে পেয়েছি । এটি আইওএস 9 এর জন্য কাজ করে

UIApplication *app = [UIApplication sharedApplication];
NSArray *eventArray = [app scheduledLocalNotifications];
for (int i=0; i<[eventArray count]; i++)
{
    UILocalNotification* oneEvent = [eventArray objectAtIndex:i];
    //Cancelling local notification
    [app cancelLocalNotification:oneEvent];
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.