আইওএস কি আমার অ্যাপ্লিকেশনটিকে ব্যাকগ্রাউন্ডে চালু করবে যদি এটি ব্যবহারকারী দ্বারা জোর করে ছেড়ে দেওয়া হয়?


219

আমি content-availableএকটি পুশ বিজ্ঞপ্তিতে পতাকা ব্যবহার করে একটি পটভূমি আনতে ট্রিগার করছি । আমি fetchএবং remote-notification UIBackgroundModesসক্ষম আছে।

এখানে আমি আমার অ্যাপডেলিগেট.এম ব্যবহার করছি তার বাস্তবায়ন:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    NSLog(@"Remote Notification Recieved");
    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.alertBody =  @"Looks like i got a notification - fetch thingy";
    [application presentLocalNotificationNow:notification];
    completionHandler(UIBackgroundFetchResultNewData);

}

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

তবে, যখন অ্যাপটি চলছে না এবং content-availableপতাকা সহ একটি ধাক্কা বিজ্ঞপ্তি পাওয়া যায় , অ্যাপটি চালু হয় না এবং didRecieveRemoteNotificationপ্রতিনিধি পদ্ধতিটি কখনও কল করা হয় না।

মাল্টিটাস্কিংয়ের সাথে ডাব্লুডাব্লুডিসি ভিডিও নতুন কী (ডাব্লুডাব্লুডিসি 2013 থেকে # 204) এটি দেখায়:এখানে চিত্র বর্ণনা লিখুন

এটিতে বলা হয় যে content-availableপতাকাটি সহ একটি ধাক্কা বিজ্ঞপ্তি পেলে অ্যাপ্লিকেশনটি "পটভূমিতে চালু করা হয়" ।

আমার অ্যাপটি কেন পটভূমিতে চালু হচ্ছে না?

সুতরাং আসল প্রশ্নটি হ'ল:

ব্যবহারকারী অ্যাপটি জোর করে ছেড়ে দেওয়ার পরে আইওএস কি পটভূমির কাজগুলি সম্পাদন করবে?


অ্যাপটি ব্যাকগ্রাউন্ডে লঞ্চ হচ্ছে কিনা তা আপনি কীভাবে পরীক্ষা করছেন?
রানমাদ

1
@ রুনমাদ আমি ক্রেপের একগুচ্ছ লগইন করেছি- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
সান্তা ক্লজ

আপনি কীভাবে এটি লগ করছেন, কেবল এনএসলগ? আপনাকে আপনার অ্যাপ্লিকেশন স্কিম সেটিংসে ম্যানুয়ালটিতে লঞ্চটি সেট করতে হবে (উত্তর দেখুন)
রানমাদ

@ রুনমাদ উত্তরের মন্তব্য দেখুন
সান্তা ক্লজ

@ হাইম বেঞ্চিমল ডিজেডি আপনি কি আপনার বাগের প্রতিবেদনের প্রতিক্রিয়া পেয়েছেন? আমি নিজের বাগ রিপোর্ট জমা দেওয়ার মতো কাজ করি নি।
সান্তা ক্লজ

উত্তর:


215

UPDATE2:

আপনি আইওএস ৮ এ প্রবর্তিত নতুন পুশকিট ফ্রেমওয়ার্কটি ব্যবহার করে এটি অর্জন করতে পারবেন যদিও পুশকিট ভিওআইপি-র জন্য ব্যবহৃত হয়। সুতরাং আপনার ব্যবহারটি ভিওআইপি সম্পর্কিত সম্পর্কিত হওয়া উচিত অন্যথায় অ্যাপ্লিকেশন প্রত্যাখ্যান হওয়ার ঝুঁকি রয়েছে। ( এই উত্তর দেখুন )।


UDPDATE1:

আইওএস 8 এর জন্য ডকুমেন্টেশনটি পরিষ্কার করা হয়েছে । ডকুমেন্টেশন এখানে পড়তে পারেন । এখানে একটি প্রাসঙ্গিক অংশ:

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


যদিও এটি ডাব্লুডাব্লুডিসি ভিডিও দ্বারা পরিষ্কার করা হয়নি, বিকাশকারী ফোরামগুলিতে একটি দ্রুত অনুসন্ধান এটি সক্রিয় করেছে:

https://devforums.apple.com/message/873265#873265 (লগইন প্রয়োজন)

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

এই পোস্টটি একজন অ্যাপল কর্মচারী ছিলেন তাই আমি মনে করি যে এই তথ্যটি সঠিক তা আমি বিশ্বাস করতে পারি।

সুতরাং দেখে মনে হচ্ছে অ্যাপটি স্যুইচার (সোয়াইপ করে) থেকে অ্যাপটি যখন হত্যা করা হয় তখনও অ্যাপটি কখনই নির্ধারিত ব্যাকগ্রাউন্ড আনার জন্য চালু করা হবে না।


2
আমার জন্য "didFinishLaunchingWithOptions" এ অ্যাকশন যুক্ত করার পরে যখন বিকল্পগুলি চালু করার কাজ শূন্য হয় না তখন কাজ করা হয়নি। আমার এখানে একই পদ্ধতি রয়েছে "ডিগ্রি রিমোটনোটিকেশন"
কঠোর.প্রসাদ

@ হার্স.প্রসাদ এটি আকর্ষণীয়। সমস্যাটি হ'ল অ্যাপটি স্যুইচারটি থেকে অ্যাপটি মারা যাওয়ার পরে অ্যাপটি চালু করা হয়নি।
সান্তা ক্লজ

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

1
@ ক্রিজস্টোন সমাধান হ'ল এটি উদ্দেশ্যমূলক আচরণ, এবং আপনি এটি সম্পর্কে কিছুই করতে পারবেন না।
সান্তা ক্লজ

1
@ জেপেকে উহ, পুশ বিজ্ঞপ্তিগুলি এগুলি প্রভাবিত হয় না। এটি কেবল পটভূমি কাজ করে যা জোর করে ছাড়ার পরে কাজ করবে না।
সান্তা ক্লজ

70

আপনি "স্কিম পরিচালনা করুন" এ আপনার টার্গেটের লঞ্চ সেটিংস পরিবর্তন করতে পারেন Wait for <app>.app to be launched manually, যা আপনাকে একটি ব্রেকপয়েন্ট সেট করে application: didReceiveRemoteNotification: fetchCompletionHandler:এবং ব্যাকগ্রাউন্ড লঞ্চটি ট্রিগার করতে পুশ বিজ্ঞপ্তি প্রেরণ করে ডিবাগ করতে দেয় ।

আমি নিশ্চিত না যে এটি সমস্যার সমাধান করবে, তবে এটি আপাতত ডিবাগিংয়ে আপনাকে সহায়তা করতে পারে।

স্ক্রিনশট


সুতরাং এটি সাহায্য করেছে কিন্তু সমস্যাটি এখনও বিদ্যমান
সান্তা ক্লজ

স্ট্রেঞ্জ। আমি ধরে নিয়েছি যে আপনি সমস্ত ফ্ল্যাশ আপনার প্লাস্টে সেট করেছেন ইত্যাদি ডাবল-চেক করেছেন তার চেয়ে বেশি?
রানমাদ

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

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

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

37

উত্তর হ্যাঁ, তবে 'ব্যাকগ্রাউন্ড আনুন' বা 'রিমোট নোটিফিকেশন' ব্যবহার করা উচিত নয়। পশকিট হ'ল আপনার ইচ্ছা উত্তর।

সংক্ষেপে, আইওএস 8-র নতুন কাঠামো, পুশকিট হ'ল নতুন পুশ বিজ্ঞপ্তি প্রক্রিয়া যা কোনও চাক্ষুষ সতর্কতা প্রম্পট ছাড়াই আপনার অ্যাপ্লিকেশনটিকে নিঃশব্দে প্রবর্তন করতে পারে এমনকি অ্যাপ্লিকেশন স্যুইচার থেকে বেরিয়ে এসে আপনার অ্যাপ্লিকেশনটিকে হত্যা করা হয়েছিল, আশ্চর্যরূপে আপনি এটি দেখতেও পারবেন না অ্যাপ্লিকেশন পরিবর্তনকারী থেকে।

অ্যাপল থেকে পুশকিট রেফারেন্স:

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

এই নতুন বৈশিষ্ট্যটি স্থাপন করতে, দয়া করে এই টিউটোরিয়ালটি দেখুন: https://zeropush.com/guide/guide-to-pushkit-and-voip - আমি এটি আমার ডিভাইসে পরীক্ষা করেছি এবং এটি প্রত্যাশার মতো কাজ করে।


9
আমার কাছে দেখে মনে হচ্ছে আপনাকে ভিওআইপি ব্যবহার করে নিজের অ্যাপটি সেট করতে হবে। যদি আপনি অ্যাপ্লিকেশনটি কোনও ভিওআইপি অ্যাপ্লিকেশন না হন তবে তা পর্যালোচনা চলাকালীন বাতিল হবে না?
duncanc4

6
দুর্ভাগ্যক্রমে, অ্যাপলের বৈধতা প্রক্রিয়াটি জানার পরে, আবেদনটি প্রত্যাখ্যান করা যুক্তিসঙ্গত হবে।
কেপা সান্টোস

3
ভিওআইপি-র জন্য ব্যবহৃত। যদি ব্যবহারকারীর জন্য ভিওআইপি ব্যবহার না করা হয় তবে এটি পর্যালোচনা প্রত্যাখ্যানের ঝুঁকিটিকে অনেকাংশে বাড়িয়ে তুলবে।
ক্রিস

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

পুশকিট ভিওআইপি, ফাইল সরবরাহকারী এবং দেখুন জটিলতার জন্য সংরক্ষিত। এই উত্তর বর্ণিত ব্যবহারের ক্ষেত্রে এটি উপলভ্য নয়।
অলপ

15

আসলে আপনার যদি ব্যাকগ্রাউন্ড আনার পরীক্ষা করতে হয় তবে আপনাকে স্কিমের একটি বিকল্প সক্ষম করতে হবে:

বিজি আনতে সক্ষম করা

আপনি এটি পরীক্ষা করতে পারেন কীভাবে অন্য উপায়: বিজি আনতে অনুকরণ

এই নতুন বৈশিষ্ট্য সম্পর্কে সম্পূর্ণ তথ্য এখানে: http://www.objc.io/issue-5/multitasking.html


4

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

দুর্ভাগ্য যে আচরণটি আগের চেয়ে বেশ আলাদা। আইওএস On-এ, আপনি যদি জিগলিং আইকনগুলি থেকে অ্যাপটিকে হত্যা করেন তবে এটি এসএলসি ট্রিগারগুলিতে পুনরায় জেগে উঠতে পারে। এখন, আপনি যদি সোয়াইপ করে হত্যা করেন, তা হয় না।

এটি অন্যরকম আচরণ এবং ব্যবহারকারী, যারা আইওএস 6 এ এটিকে হত্যা করে আমাদের অ্যাপ থেকে দরকারী তথ্য পেতে থাকবে, এখন তা করবে না।

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


2
এটি আমরা যা করেছি ঠিক সেভাবেই (অ্যাপ্লিকেশনওয়ালটার্মিনেট), তবে আমি বিশ্বাস করি না যে এটি মেমরির শুদ্ধির সময় নোটিফিকেশন দিয়েছে, কমপক্ষে আইওএস-তে নয় I আমি লক্ষ্য করেছি যে এটি কোনও ওএস আপগ্রেডের জন্য রিবুট করার আগেই বিজ্ঞপ্তিটি দেখিয়েছিল, তবে তাই বিরল এটি খুব খারাপ মনে হয় নি।
snarshad

"আইওএস On-তে, আপনি যদি জিগলিং আইকনগুলি থেকে অ্যাপটি মেরে ফেলেন তবে এটি এসএলসি ট্রিগারগুলিতে পুনরায় জেগে উঠতে পারে Now এখন, আপনি যদি সোয়াইপ করে হত্যা করেন তবে তা ঘটে না।" এটি এখন ঘটে, এটি আইওএস 7 এর প্রথম সংস্করণে একটি অস্থায়ী প্রতিরোধ ছিল
ফঙ্কিব্রো

3

এটি আপনাকে সাহায্য করতে পারে

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

উত্স: https://developer.apple.com/library/content/docamentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html


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