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


116

এই বিষয়টি সম্পর্কে প্রচুর স্ট্যাকওভারফ্লো থ্রেড রয়েছে তবে আমি এখনও একটি ভাল সমাধান পাইনি।

যদি অ্যাপটি ব্যাকগ্রাউন্ডে নয়, আমি পরীক্ষা করতে পারবেন launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]মধ্যে application:didFinishLaunchingWithOptions:কল যদি এটি একটি বিজ্ঞপ্তি থেকে খোলা হয়েছে তা দেখতে হবে।

যদি অ্যাপটি ব্যাকগ্রাউন্ডে থাকে তবে সমস্ত পোস্ট application:didReceiveRemoteNotification:অ্যাপ্লিকেশন স্থিতি ব্যবহার এবং চেক করার পরামর্শ দেয় । তবে আমি যেমন পরীক্ষিত হয়েছি (এবং এই এপিআইয়ের নামটিও বোঝায়), ট্যাপডের পরিবর্তে বিজ্ঞপ্তিটি এলে এই পদ্ধতিটি কল হয়।

সুতরাং সমস্যাটি হ'ল, যদি অ্যাপটি চালু হয় এবং তারপরে ব্যাকগ্রাউন্ড হয় এবং আপনি জানেন যে কোনও বিজ্ঞপ্তি এসেছে application:didReceiveNotification( application:didFinishLaunchWithOptions:এই মুহুর্তে ট্রিগার করবে না), আপনি কীভাবে জানবেন যে ব্যবহারকারী বিজ্ঞপ্তিটি আলতো চাপ দিয়ে বা কেবলমাত্র আলতো চাপ দিয়ে অ্যাপটি পুনরায় চালু করেছেন কিনা? অ্যাপ আইকন? কারণ ব্যবহারকারী যদি বিজ্ঞপ্তিটি ট্যাপ করেন তবে প্রত্যাশাটি সেই বিজ্ঞপ্তিতে উল্লিখিত পৃষ্ঠাটি খুলবে। অন্যথায় এটি করা উচিত নয়।

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

ধন্যবাদ।

সম্পাদনা করুন:

নীচে একটি উত্তর পড়ার পরে, আমি এইভাবে আমার প্রশ্নটি পরিষ্কার করে বলতে পারি:

কীভাবে আমরা এই 2 টি পরিস্থিতিতে আলাদা করতে পারি:

(ক) 1. অ্যাপ ব্যাকগ্রাউন্ডে যায়; 2. বিজ্ঞপ্তি প্রাপ্ত; ৩. বিজ্ঞপ্তিতে ব্যবহারকারী ট্যাপ করুন; ৪. অ্যাপ্লিকেশনটি অগ্রভাগে প্রবেশ করে

(খ) 1. অ্যাপ ব্যাকগ্রাউন্ডে যায়; 2. বিজ্ঞপ্তি প্রাপ্ত; ৩. ব্যবহারকারী বিজ্ঞপ্তি উপেক্ষা করে পরে অ্যাপ আইকনে ট্যাপ করে; ৪. অ্যাপ্লিকেশনটি অগ্রভাগে প্রবেশ করে

যেহেতু application:didReceiveRemoteNotification:পদক্ষেপ 2 এ উভয় ক্ষেত্রেই ট্রিগার করা হয়েছে।

বা, application:didReceiveRemoteNotification:কেবলমাত্র (এ) এর জন্য তৃতীয় ধাপে ট্রিগার করা উচিত , তবে আমি আমার অ্যাপ্লিকেশনটি ভুলভাবে কনফিগার করেছি তাই আমি এটিকে দ্বিতীয় ধাপে দেখছি?


আপনার পেডলোডের জন্য একটি কাস্টম অভিধান মান ব্যবহার করুন এবং সেই অনুযায়ী কাজ করুন। বেশ সহজ.

@ সোলশাইন্ডড ডিকশনারিটি পে-লোডে প্রতিনিধিত্ব করতে পারে ব্যবহারকারী নোটিফিকেশনটিতে ট্যাপ করেছেন কিনা, তাই না? উদাহরণস্বরূপ আপনার বন্ধু এ একটি নিবন্ধ বি পোস্ট করেছে, আপনি পে-লোডে {ব্যবহারকারী: এ, নিবন্ধ: বি say বলতে পারেন, অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় এবং আপনি ডিগ্রি রিমোটনোটিকেশন পেয়েছেন। অ্যাপটি পুনরায় চালু হলে আপনি কীভাবে জানবেন, আপনার নিবন্ধটি প্রদর্শিত হবে কিনা?
বাও লেই

2
@ সোলশাইনড আমি ডকুমেন্টেশন পড়েছি এবং আমি নিজেকে রিসিভরেমোটনোটিকেশন যা শিখেছি তা শিখিয়েছি। আপনি কি আসলে আমার প্রশ্নটি পড়েছেন? প্রতি অ্যাপলের অফিশিয়াল ডকুমেন্টেশনডড রিসিভরমিটনোটিকেশন "প্রতিনিধিদের বলে যে চলমান অ্যাপটি একটি দূরবর্তী বিজ্ঞপ্তি পেয়েছে"। আমি যদি জিজ্ঞাসা করছি যে কোনও নোটিফিকেশনটিতে ব্যবহারকারী ট্যাপ করে রাখেন তবে কী বলার ভাল উপায়। আপনি যে এসও লিঙ্কটি উল্লেখ করেছেন সেটি হল অ্যাপটি যখন কোনও নতুন শুরু থেকে চালু হবে, আমি অ্যাপটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় আমি পরিস্থিতিটি জিজ্ঞাসা করছি।
বাও লেই


1
@ সোলশাইন ঠিক আছে সম্ভবত আমি এটি যথেষ্ট পরিষ্কার করে বললাম না। আমি বলতে চাইছি যদি অ্যাপটি পুরোপুরি ছেড়ে দেওয়া হয়, ব্যাকগ্রাউন্ডে নয়, হ্যাঁ ফিনিশল্যাঞ্চিং কল হবে। তবে আপনি যদি আপনার অ্যাপ্লিকেশন চালু করেন এবং তারপরে অ্যাপটি ব্যাকগ্রাউন্ড করুন এবং এখন একটি বিজ্ঞপ্তি চলে আসে এবং ব্যবহারকারী বিজ্ঞপ্তিতে ট্যাপ করে এবং এখন ডিফিনিশলঞ্চিংটি আর কল করা হবে না। পরিবর্তে অ্যাপ্লিকেশনউইলএন্টারফোরগ্রাউন্ড এবং অ্যাপ্লিকেশনডিডকোম্যাকটিভ কল করা হবে। আপনি কীভাবে বলতে পারবেন যে অ্যাপ্লিকেশনটি অগ্রভাগে প্রবেশ করছে কারণ ব্যবহারকারী বিজ্ঞপ্তি বা অ্যাপ্লিকেশন আইকনটিতে ট্যাপ করেছেন?
বাও লেই

উত্তর:


102

ঠিক আছে আমি অবশেষে বুঝতে পেরেছি।

লক্ষ্য সেটিংসে ➝ সক্ষমতার ট্যাব ➝ পটভূমি মোডগুলি, আপনি যদি "রিমোট নোটিফিকেশনগুলি" চেক application:didReceiveRemoteNotification:করেন তবে বিজ্ঞপ্তিটি আসার সাথে সাথেই ট্রিগার হয়ে উঠবে (যতক্ষণ না অ্যাপ্লিকেশন ব্যাকগ্রাউন্ডে রয়েছে), এবং সেই ক্ষেত্রে বলার উপায় নেই is ব্যবহারকারী বিজ্ঞপ্তিতে আলতো চাপবে।

আপনি যদি সেই বাক্সটি চেক করে application:didReceiveRemoteNotification:না ফেলে থাকেন তবেই আপনি বিজ্ঞপ্তিটিতে আলতো চাপ দিলেই চলবে।

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

আশা করি এটি এই সমস্যার জন্য যে কারও জন্য সহায়ক হবে। অ্যাপলও এটিকে এখানে পরিষ্কারভাবে নথিভুক্ত করেনি তাই এটি বের করতে আমার কিছুটা সময় লেগেছে।

এখানে চিত্র বর্ণনা লিখুন


6
আমার ব্যাকগ্রাউন্ড মোডগুলি পুরোপুরি "অফ" এ সেট আছে, তবে ব্যাকগ্রাউন্ড মোডে অ্যাপের সাথে কোনও বিজ্ঞপ্তি এলে এখনও অবহিত হয়ে যায়।
গটফ্রিড

5
গ্রেট! এটি আমাকে সাহায্য করেছিল। এটি দুঃখের বিষয় তবে আমার দূরবর্তী বিজ্ঞপ্তিগুলি বন্ধ করা দরকার। যখন কোনও পুশ বিজ্ঞপ্তি উপস্থিত হয় এবং ব্যবহারকারীর ট্যাপ সনাক্ত করি তখন আমি ডেটা প্রিফেচ করতে চাই। আমি এটি অর্জনের উপায় খুঁজে পাচ্ছি না।
পিটার ফেনিমা

1
আমি ব্যাকগ্রাউন্ড মোডটি "চালু" মোডে সেট করেছি এবং দূরবর্তী বিজ্ঞপ্তিগুলি সক্ষম করে। এখনও বিজ্ঞপ্তি ইভেন্ট সনাক্ত করতে সক্ষম হয় নি।
কলিম সাইয়াদ

1
আমার একই সমস্যা রয়েছে ব্যাকগ্রাউন্ড মোডটি "চালু" তে সেট করা হয়েছে এবং রিমোট নোটিফিকেশন সক্ষম করেছে, তবে ব্যাকগ্রাউন্ড মোডে অ্যাপ্লিকেশনটিতে বিজ্ঞপ্তি এলে এখনও বিজ্ঞপ্তি পাওয়া যায় না
স্বপ্নিল ধোত্রে

@ বাও - আমি মনে করি এটি অ্যাপস্টোরে প্রত্যাখ্যানের কারণ হবে, কারণ এই বিকল্পটি মূলত ব্যাকগ্রাউন্ডে বিজ্ঞপ্তি সম্পর্কিত সামগ্রী ডাউনলোড করতে ব্যবহৃত হয়। সুতরাং আপনি যদি কোনও সামগ্রী ডাউনলোড না করেন তবে অ্যাপল আপনার অ্যাপ্লিকেশনটিকে প্রত্যাখ্যান করতে পারে। বিকাশকারী.এপ্লে.লাইবারি
আইওএস

69

আমি আপনার মতো একই জিনিসটি সন্ধান করেছি এবং বাস্তবে এমন একটি সমাধান পেয়েছি যার জন্য দূরবর্তী বিজ্ঞপ্তিটি টিকিয়ে তোলার দরকার নেই।

ব্যবহারকারী টেপ করেছেন বা অ্যাপটি ব্যাকগ্রাউন্ডে আছে বা সক্রিয় আছে কিনা তা পরীক্ষা করতে আপনাকে কেবল অ্যাপ্লিকেশনের স্টেটটি পরীক্ষা করতে হবে

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{

    if(application.applicationState == UIApplicationStateActive) {

        //app is currently active, can update badges count here

    }else if(application.applicationState == UIApplicationStateBackground){

        //app is in background, if content-available key of your notification is set to 1, poll to your backend to retrieve data and update your interface here

    }else if(application.applicationState == UIApplicationStateInactive){

        //app is transitioning from background to foreground (user taps notification), do what you need when user taps here

    }

আরও তথ্যের জন্য চেক করুন:

ইউআইকিট ফ্রেমওয়ার্ক রেফারেন্স> ইউআইএপ্লিকেশন ক্লাস রেফারেন্স> ইউআইএপ্লিকেশন স্টেট


10
অ্যাপটি স্ক্রিনে থাকা অবস্থায় নোটিফিকেশন সেন্টার (শীর্ষ থেকে সোয়াইপ) বা কন্ট্রোল সেন্টার (নীচে থেকে সোয়াইপ) ব্যবহারকারীর সাথে জড়িত থাকার ফলস্বরূপ অ্যাপটি ইউআইএপ্লিকেশন স্টেটআইএনএ্যাকটিভ হওয়ার কী হবে? স্পষ্টতই, এপিএনএস নিষ্ক্রিয় অবস্থায় পেয়েছিল বা ব্যবহারকারী প্রকৃতপক্ষে এটি ট্যাপ করেছে কিনা তা বলার উপায় নেই।
কোস্তিয়া কিম

1
@ কোস্টিয়াকিম আপনি ঠিক বলেছেন, তবে এটি একটি সুপার এজ কেস ... এর বাইরে, অগ্রভাগে অ্যাপ্লিকেশনটির মধ্যে পৃথক করার ক্ষেত্রে এই উত্তরটি সবচেয়ে বৈধ ... ব্যবহারকারী ট্যাপিং ... পটভূমিতে অ্যাপ্লিকেশন
মধু

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

1
@ কোস্টিয়াকিম আমি আসলে নিয়ন্ত্রণ কেন্দ্রটি উন্মুক্ত ছিল কিনা তা জেনেও সমস্যাটি সমাধান করতে সক্ষম হয়েছি বা ব্যবহারকারী যদি সত্যই সেট হয়ে আছে func applicationDidEnterBackground(_ application: UIApplication)এবং এটিতে func applicationDidBecomeActive(_ application: UIApplication)অ্যাপ্লিকেশনটিতে প্রদর্শন করার অনুমতি দেয় তবে মিথ্যাতে সত্য হিসাবে সেট করা একটি বুলিয়ান যোগ করে বিজ্ঞপ্তিটি ট্যাপ করে থাকে নিয়ন্ত্রণ কেন্দ্র বা বিজ্ঞপ্তি তালিকার কারণে অ্যাপটি নিষ্ক্রিয়
থাকাকালীন

3
অ্যাপল কোনও ভিন্ন ইভেন্ট উপস্থাপন করে বা মেটাডেটাতে কোনও পতাকা যুক্ত না করে ব্যবহারকারী প্রকৃতপক্ষে নোটিফিকেশনের সাথে ইন্টারেক্ট করেছেন তা বোঝাতে এটি আমার মনকে ছাঁটাই করে। ব্যবহারকারীর অ্যাপ্লিকেশন রাষ্ট্র সম্পর্কে পরিবেষ্টিত তথ্যের উপর ভিত্তি করে কোনও পদক্ষেপ নিয়েছিল কিনা তা 'অনুমান' করা কি কি বিট তথ্যের জন্য অযৌক্তিক, যা ব্যবহারকারীর প্রয়োগের আচরণের প্রত্যাশাকে প্রভাবিত করে। সম্ভবত একমাত্র কাজটি হল সেই তথ্যটি দিয়ে অ্যাপটি খোলার জন্য একটি কাস্টম অ্যাকশন তৈরি করা?
অ্যালান নেইনহুইস

20

আইওএস / এক্সকোডের মতে : কীভাবে জানবেন যে অ্যাপটি নোটিফিকেশন বা স্প্রিংবোর্ড অ্যাপ্লিকেশন আইকনে ক্লিক করে চালু করা হয়েছে? আপনাকে এইভাবে ডিগ্রি রিসিভলোকলনোটিকেশনে অ্যাপ্লিকেশনের স্থিতি পরীক্ষা করতে হবে:

if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive)
{
    // user has tapped notification
}
else
{
    // user opened app from app icon
}

যদিও এটি আমার কাছে পুরোপুরি বোঝায় না, এটি কাজ করে বলে মনে হচ্ছে।


1
এটি এই পরিস্থিতিতে কাজ করবে না। আমি আগে চেষ্টা করেছিলাম। যখন সেই চেকবাক্সটি চেক করা হয়েছিল (বিবরণের জন্য আমার গৃহীত উত্তর দেখুন), বিজ্ঞপ্তিটি আসার পরে, "// ব্যবহারকারীর দ্বারা বিজ্ঞপ্তিটি ট্যাপ করা হয়েছে" মন্তব্য সহ আপনার লাইনটি প্রবেশ করবে, যদিও ব্যবহারকারী বিজ্ঞপ্তিটি ট্যাপ করেনি (বিজ্ঞপ্তিটি সবেমাত্র উপস্থিত হয়েছে) )।
বাও লেই

3
আমি একমত নই আমার পটভূমির ক্ষমতাগুলিতে "দূরবর্তী বিজ্ঞপ্তিগুলি" পরীক্ষা করা আছে এবং এটি আমার উত্তরে বর্ণিত পদ্ধতিতে কাজ করে। আমার পাশাপাশি "ব্যাকগ্রাউন্ড আনতে" পরীক্ষা করা আছে। এর ফলেই কি এই পরিবর্তন ঘটে?
ওয়ার্নার ক্রাটোচুইল

আপনি আমার উত্তর +1 করতে পারেন? ;-) স্ট্যাকওভারফ্লোতে আরও অংশ নিতে আমার এখনও কিছু ভোট দরকার। অনেক অনেক ধন্যবাদ
ওয়ার্নার ক্রাটোচিল

ইউ, এই সমাধান। tnx।
আফশিন

নোট করুন যে ব্যবহারকারী কোনও ভিন্ন স্ক্রিনে থাকা অবস্থায় বিজ্ঞপ্তিটি প্রেরণ করা হলে এটি মিথ্যা ইতিবাচক হবে (উদাহরণস্বরূপ, যদি তারা স্থিতি বারটি নীচে টানেন এবং আপনার অ্যাপ্লিকেশন থেকে কোনও বিজ্ঞপ্তি পান)।
কেভিন কুপার 21

16

যদি কেউ এটি 3.0 দ্রুতগতিতে চান

switch application.applicationState {
    case .active:
        //app is currently active, can update badges count here
        break
    case .inactive:
        //app is transitioning from background to foreground (user taps notification), do what you need when user taps here
        break
    case .background:
        //app is in background, if content-available key of your notification is set to 1, poll to your backend to retrieve data and update your interface here
        break
    default:
        break
    }

দ্রুত 4 জন্য

switch UIApplication.shared.applicationState {
case .active:
    //app is currently active, can update badges count here
    break
case .inactive:
    //app is transitioning from background to foreground (user taps notification), do what you need when user taps here
    break
case .background:
    //app is in background, if content-available key of your notification is set to 1, poll to your backend to retrieve data and update your interface here
    break
default:
    break
}

কোন ট্রিগারটিতে আমাদের এই কোডটি যুক্ত করা উচিত, কি রিসিভের রিমোটনোটিকেশন বা ফিনিশল্যাঞ্চিং উইথঅপশনগুলি করা উচিত?
দশরথ

2
করণীয় রিসিপ রেমোটনোটিকেশন
হামিদ শাহসওয়ারি

@ হামিদ শ ,,,, আমি সমস্ত রাজ্যে পুশ বিজ্ঞপ্তি পেয়েছি অর্থাৎ যখন অ্যাপ্লিকেশন ভুলে যাওয়া, পটভূমিতে, বন্ধ (সমাপ্ত) হয় ..! তবে আমার সমস্যাটি হ'ল অ্যাপটি ব্যাকগ্রাউন্ড অবস্থায় এবং বন্ধ (সমাপ্ত) অবস্থায় থাকা অবস্থায় ব্যাজ গণনা কীভাবে বাড়ানো যায় ???? দয়া করে আমাকে বলুন আমি কীভাবে এটি করি ....? আমার অ্যাপ্লিকেশন ব্যাজ গণনাটি কেবল তখনই বাড়বে যখন অ্যাপটি ভুলে যাওয়া অবস্থায় .....? যদি সম্ভব হয় তবে আমাকে সংক্ষেপে বলুন .......!
কিরণ যাদব

8

আপনার যদি "পটভূমি মোডগুলি"> "রিমোট বিজ্ঞপ্তিগুলি" চেক করা আছে == হ্যাঁ, বিজ্ঞপ্তি ইভেন্টে আলতো চাপবে আগত:

-(void)userNotificationCenter:(UNUserNotificationCenter *)center **didReceiveNotificationResponse**:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler.

এটা আমাকে সাহায্য করেছে। উপভোগ করুন :)


আমি দেখেছি যে অ্যাপল এটি যুক্ত করেছে তবে কীভাবে এইভাবে বিজ্ঞপ্তির কাস্টম পেডলোড পাবেন তা অনুধাবন করতে পারিনি।
sudo

অ্যাপটি কোনও পটভূমি অবস্থায় থাকে এবং সক্রিয় হয়ে ওঠে এবং অ্যাপটি যখন নিহত রাষ্ট্র থেকে শুরু হয়
নিখিল মুসকুর

@ নিখিলমাস্কুর কেবল "রিমোট নোটিফিকেশন" ইয়ে সক্ষম করলেই কি?
জোড়ায়ার

@ জোড়ায়র ঠিক আছে
নিখিল মুসকুর

8

আমিও এই সমস্যায় পড়েছিলাম - তবে নতুন UserNotificationsফ্রেমওয়ার্ক সহ আইওএস 11 এ ।

আমার জন্য এটি এখানে:

  • নতুন লঞ্চ: application:didFinishLaunchingWithOptions:
  • একটি সমাপ্ত অবস্থা থেকে প্রাপ্ত: application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
  • অগ্রভাগে প্রাপ্ত: userNotificationCenter(_:willPresent:withCompletionHandler:)
  • পটভূমিতে প্রাপ্ত: userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:

এটি আইওএস 11-এ করার উপায়
ওহাদএম

এটি ঠিক এত জটিল 🤦‍♂️
জোরায়ের

4

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

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

}

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

3

আইওএস 10 এবং তারপরের জন্য এটিকে অ্যাপডিলেজেটে রাখুন, বিজ্ঞপ্তিটি আলগা হয়ে গেছে তা জানতে (এমনকি অ্যাপ্লিকেশনটি বন্ধ বা খোলা রয়েছে এমনও কাজ করে)

func userNotificationCenter(_ center: UNUserNotificationCenter,
                                didReceive response: UNNotificationResponse,
                                withCompletionHandler completionHandler: @escaping () -> Void) {
print("notification tapped here")
}

1
এটি আইওএস 10+ এর সঠিক উত্তর। এখানে অন্য থ্রেডে সম্পূর্ণ ব্যাখ্যা সরবরাহ করা হয়েছে: stackoverflow.com/a/41783666/1761357
মৃত_কেন_ড্যান্স

2

PushNotificationManagerশ্রেণীর অভ্যন্তরে হ্যান্ডেল প্রাপ্ত পুশনোটিকেশনের জন্য দুটি ফানক রয়েছে :

class PushNotificationManager: NSObject, MessagingDelegate, UNUserNotificationCenterDelegate{

}

বিজ্ঞপ্তি আসার সাথে সাথে আমি প্রথম ট্রিগারটিতে পরীক্ষা করেছিলাম

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

    completionHandler(UNNotificationPresentationOptions.alert)

    //OnReceive Notification
    let userInfo = notification.request.content.userInfo
    for key in userInfo.keys {
         Constants.setPrint("\(key): \(userInfo[key])")
    }

    completionHandler([])

}

এবং দ্বিতীয়টি যখন বিজ্ঞপ্তিতে ট্যাপ করা হয়:

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

    //OnTap Notification
    let userInfo = response.notification.request.content.userInfo
    for key in userInfo.keys {
        Constants.setPrint("\(key): \(userInfo[key])")
    }

    completionHandler()
}

আমি এটি রিমোট নোটিফিকেশনের অন এবং অফ উভয় অবস্থায়ই পরীক্ষিত করেছি (পটভূমি মোডে)


1

সুইফট 5.1

UIApplication.State আমার পক্ষে কাজ করেনি, কারণ আমি একবার আমার অ্যাপ্লিকেশনটিতে ফিঙ্গারপ্রিন্ট (মডেল প্রদর্শিত হয়) পড়ার পরে বিজ্ঞপ্তিটি উপরের বারেও ফেলে দেওয়া হয় এবং ব্যবহারকারীকে অবশ্যই এটিতে ক্লিক করতে হবে।

আমি তৈরি করেছি

public static var isNotificationFromApp: Bool = false

ইন AppDelegateএবং আমি এটি trueআমার সূচনাতে সেট করেছিলাম viewControllerএবং তারপরে আমার বিজ্ঞপ্তিতে storyboard/ viewControllerআমি কেবল এটি যাচাই করি :)

আশা করি এটি কাজে আসতে পারে


-7

application:didReceiveRemoteNotification:fetchCompletionHandler:অ্যাপটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় আপনি অ্যাপ ডেলিগেটের পদ্ধতিতে কল করতে আপনার পুশ বিজ্ঞপ্তির পেডলোডটি কনফিগার করতে পারেন । আপনি এখানে কিছু পতাকা সেট করতে পারেন যাতে ব্যবহারকারীর পরের বার আপনার অ্যাপ্লিকেশন চালু করার সময় আপনি নিজের ক্রিয়াকলাপটি সম্পাদন করতে পারেন।

অ্যাপলের ডকুমেন্টেশন থেকে আপনাকে পুশ বিজ্ঞপ্তির সাথে যুক্ত নতুন সামগ্রী ডাউনলোড করতে এই পদ্ধতিগুলি ব্যবহার করা উচিত। এছাড়াও এটির জন্য কাজ করতে, আপনি পটভূমি মোড থেকে রিমোট বিজ্ঞপ্তি এবং আপনার ধাক্কা বিজ্ঞপ্তি পে লোড থাকা আবশ্যক সক্ষম আছে content-availableএর ভ্যাল 1 সেট আরও তথ্য থেকে কী দয়া করে আপেল ডক থেকে ডাউনলোড অধ্যায় আরম্ভ করুন পুশ বিজ্ঞপ্তি ব্যবহার দেখতে এখানে

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

আশা করি এটি আপনাকে সহায়তা করবে।


@ ভূসান আপনি আমার প্রশ্নের বিবরণ পড়েছেন? বিজ্ঞপ্তিটি সবেমাত্র আসার সাথে সাথে আমি রিডিজারেমোটনোটিকেশন কল করা দেখছি (ব্যবহারকারী এটিতে ট্যাপ করার আগে)। আমি এটি জানতে চেয়েছিলাম যে ব্যবহারকারী এটিতে ট্যাপ করেছেন কিনা।
বাও লেই

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