অ্যাপ্লিকেশন গোষ্ঠীগুলির সাথে অ্যাপ্লিকেশনগুলির মধ্যে ডেটা যোগাযোগ এবং অব্যাহত


87

আইওএস 8 গতকাল অ্যাপ গ্রুপগুলির বিষয়ে একটি নতুন এপিআই প্রকাশ করেছে revealed অ্যাপ্লিকেশনগুলির মধ্যে ডেটা ভাগ করে নেওয়ার এবং যোগাযোগ করার আগে এটি এক ধরণের অগোছালো ছিল এবং আমি বিশ্বাস করি যে অ্যাপ্লিকেশনগুলি সঠিকভাবে সংশোধন করতে চাইছে Grou

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

তাহলে অ্যাপ গ্রুপগুলি আসলে কী করতে চায়? কীভাবে এটি ব্যবহার করবেন সে সম্পর্কে কোনও নথি আছে?

উত্তর:


83

অ্যাপ্লিকেশন গোষ্ঠীর আরেকটি সুবিধা হ'ল একটি NSUserDefaultsডেটাবেস ভাগ করে নেওয়ার ক্ষমতা । এটি অ্যাপ এক্সটেনশনের জন্য (বিজ্ঞপ্তি কেন্দ্রের উইজেটগুলি, কাস্টম কীবোর্ড ইত্যাদি) কাজ করে।

NSUserDefaultsঅ্যাপ্লিকেশন গোষ্ঠীর সমস্ত অ্যাপ্লিকেশনগুলিতে আপনার অবজেক্টটি এর মতো সূচনা করুন এবং তারা ডাটাবেস ভাগ করবেন:

উদ্দেশ্য গ:

[[NSUserDefaults alloc] initWithSuiteName:@"<group identifier>"];

দ্রুত:

NSUserDefaults(suiteName: "<group identifier>")

[NSUserDefaults standardUserDefaults]প্রতিটি অ্যাপ্লিকেশনের জন্য ডাটাবেস থেকে সমস্ত কিছু মনে রাখবেন এই ডাটাবেসটির মধ্যে বহন করবে না।

ডকুমেন্টেশন একটি সঠিক উদাহরণ হিসাবে ভাল দেয় (বিটা 3 অনুযায়ী)।

এবং ডাটাবেস সিঙ্ক্রোনাইজ করতে ভুলবেন না:

[yourDefaults synchronize];

4
কেবলমাত্র সিমুলেটারে কাজ করে (এক্সকোড 6 বিটা 5, আইওএস 8 বিটা 5)
আইওএস দেব

8
দ্রষ্টব্য: আপনি যদি এটি কোনও আইওএস 8 এক্সটেনশন (উদাহরণস্বরূপ কীবোর্ড) দিয়ে ব্যবহার করে থাকেন তবে আপনার এক্সটেনশনের তার তথ্য.প্লেস্ট ফাইলটিতে রিকোয়েস্টস ওপেনঅ্যাক্সেস = ইয়েস রয়েছে তা নিশ্চিত করতে হবে।
কিরণ পানেসার

4
আমি রিকোয়েস্টস ওপেনএ্যাক্সেস = হ্যাঁ করেছি এবং নির্দেশনাটি অনুসরণ করেছি এখনও এটি ডিভাইসে আমার পক্ষে কাজ করে না এবং ডিভাইসের জন্য নির্দিষ্ট কিছু এমুলেটরটিতে ভাল কাজ করে?
ম্যাক

আমার সাথে একই সমস্যা, আমি আমার অ্যাপে ইন্টিগ্রেটেড শেয়ারের এক্সটেনশন রেখেছি, এটি সিমুলেটারে কাজ করে, তবে আসল ডিভাইসে কাজ করে না, আমি RequestOpenAccess = YES যোগ করেছি তবে এটি কাজ করছে না, আমার প্রশ্নটি stackoverflow.com/questions/30489894/ …
রবি ওঝা

4
@ মাইক্রিচার্ডস নিশ্চিত নন, তবে আমি যদি সঠিকভাবে মনে রাখি তবে অ্যাপ্লিকেশন গোষ্ঠীগুলি একটি দলের আইডির সাথে উপস্থাপিত হয়েছে
সান্তা ক্লজ

74

একাধিক অ্যাপ্লিকেশনগুলির মধ্যে এনএসইউসারফেরাল ডেটা ভাগ করা

কোনও অ্যাপ্লিকেশন এবং একটি এক্সটেনশনের মধ্যে বা 2 টি অ্যাপের মধ্যে ডিফল্ট ভাগ করার জন্য আপনাকে নীচের পদক্ষেপগুলি ব্যবহার করে আপনার সেটিংসে একটি অ্যাপ গ্রুপ যুক্ত করতে হবে:

  1. প্রকল্প নেভিগেটরে * .xcodeproj ফাইলে ক্লিক করুন (শীর্ষে থাকা উচিত)।
  2. প্রকল্প নেভিগেটরের ডানদিকে প্রজেক্ট এবং লক্ষ্যগুলি সন্ধান করুন। লক্ষ্য অনুসারে আপনার প্রাথমিক লক্ষ্যটিতে ক্লিক করুন (লক্ষ্যগুলির মধ্যে প্রথম জিনিস হওয়া উচিত)।
  3. উপরের দিকে, সক্ষমতার ট্যাবে ক্লিক করুন tab
  4. অ্যাপ গ্রুপগুলি বিভাগে অ্যাপ গোষ্ঠী চালু করতে ডানদিকে স্যুইচটি ক্লিক করুন click
  5. + বাটনে ক্লিক করুন এবং গ্রুপ ডটকম.প্যানি.এমএপি নামে একটি অ্যাপ গ্রুপ যুক্ত করুন ।
  6. আপনার অন্যান্য অ্যাপ্লিকেশনগুলিতে একই জায়গায় যান এবং এই গোষ্ঠীটি এখন নির্বাচন করার জন্য উপলব্ধ হওয়া উচিত। এই ভাগ করা ডেটা ব্যবহার করবে এমন প্রতিটি অ্যাপের জন্য এই গোষ্ঠীটি চালু করুন।

দ্রষ্টব্য: আপনি যদি অ্যাপল বিকাশকারী পোর্টালে (অ্যাপল ওয়েবসাইট যা আপনার শংসাপত্র, পরিচয়কারী, ডিভাইস এবং সরবরাহকারী প্রোফাইলগুলির সবগুলি দেখায়) যান এবং সনাক্তকারী> অ্যাপ গ্রুপগুলিতে যান তবে আপনার এই নতুন অ্যাপ গ্রুপটি দেখতে হবে।

ডেটা সঞ্চয় করতে:

var userDefaults = NSUserDefaults(suiteName: "group.com.company.myApp")!
userDefaults.setObject("user12345", forKey: "userId")
userDefaults.synchronize()

ডেটা পুনরুদ্ধার করতে:

var userDefaults = NSUserDefaults(suiteName: "group.com.company.myApp")
if let testUserId = userDefaults?.objectForKey("userId") as? String {
  print("User Id: \(testUserId)")
}

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

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

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

টুইটারে কেবল যুক্ত করতে চান আপনি যদি ফানক অ্যাপ্লিকেশনটি থেকে অ্যাপটি চালু করতে চান (অ্যাপ: ইউআইএপ্লিকেশন, ওপেন ইউআরএল ইউআরএল: এনএসআরএল, বিকল্পগুলি: [স্ট্রিং: যেকোন অবজেক্ট]) -> বুল
তাইমুর আজমল

দুর্দান্ত উত্তর ধন্যবাদ @ টেনাসিয়াসজয় আমি অ্যাপ্লিকেশন থেকে অ্যাপএ-তে একটি পরিবর্তনশীল এবং এর মান পুনরুদ্ধার করার চেষ্টা করছি, আমি কীভাবে এটি করব? উদাহরণস্বরূপ যদি AppB এ "riderCancelledRequest = true" হয়, আমি কীভাবে এটি এপিএতে পুনরুদ্ধার করব?
LizG

37

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

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

NSFileManagerএটিতে একটি পদ্ধতি রয়েছে containerURLForSecurityApplicationGroupIdentifier:যেখানে আপনি নিজের অ্যাপ্লিকেশনগুলির জন্য অ্যাপ্লিকেশনগুলি চালু করার সময় আপনি যে শনাক্তকারী তৈরি করেছিলেন তা পাস করতে পারেন:

NSURL *containerURL = [[NSFileManager defaultManager] 
           containerURLForSecurityApplicationGroupIdentifier:@"group.com.company.app"];

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

@ জাস্টাফিংগার এই আইওএস 7 পদ্ধতিটি কেবল ভাগ করা অ্যাপ্লিকেশনগুলির মধ্যে ডেটা লিখতে এবং পড়তে একটি URL তৈরি করার জন্য। এই নির্দিষ্ট পদ্ধতিটি উইজেটের জন্য কেবল সত্যই কার্যকর (আমি এখনও পর্যন্ত যা দেখছি) থেকে কার্যকর, তবে অন্যান্য এক্সটেনশানগুলি নয়।
ওয়েইন হার্টম্যান

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

@ জাস্টাফিংগার আমিও NSUserDefaultsকাজ করতে পারিনি । আমি বিটা 1 বাগ পর্যন্ত চক করছি।
ওয়েইন হার্টম্যান

@ ওয়েইন হার্টম্যান ডাটাবেসটির জন্য একটি পরিকল্পনা রয়েছে NSUserDefaults। আমার উত্তর দেখুন।
সান্তা ক্লজ

6

আমি আজ একটি গুরুত্বপূর্ণ ট্র্যাপটি টেপ করেছি:

অনেক প্রকল্পে আমি একটি একক অ্যাপ্লিকেশন লক্ষ্য দেখেছি এবং সেই লক্ষ্যটির প্রতিটি কনফিগারেশনের জন্য সেট করা বিভিন্ন বান্ডিল শনাক্তকারী with এখানে জিনিসগুলি অগোছালো হয়ে যায়। বিকাশকারীরা যা লক্ষ্য করেছিলেন তা হ'ল ডিবাগ কনফিগারেশনের জন্য একটি ডিবাগ অ্যাপ্লিকেশন এবং প্রকাশের টার্গেটের জন্য একটি প্রোডাকশন অ্যাপ তৈরি করা।

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

var userDefaults = NSUserDefaults(suiteName: "group.com.company.myApp")
userDefaults!.setObject("user12345", forKey: "userId")
userDefaults!.synchronize()

এটি অনেক জায়গায় সমস্যা সৃষ্টি করে:

  1. কল্পনা করুন আপনি যখন কোনও বিশেষ অ্যাপ্লিকেশন-পরিচয়-পর্দা ব্যবহারকারীর কাছে প্রদর্শিত হবে তখন আপনি কীটির জন্য YES সেট করেছেন। অন্যান্য অ্যাপ্লিকেশনটি এখন হ্যাঁ পড়বে এবং পরিচিতিটি প্রদর্শন করবে না।
  2. হ্যাঁ কিছু অ্যাপস তাদের ডিফল্টগুলিতে ওআউথ টোকেনগুলিও সঞ্চয় করে। যাইহোক ... প্রয়োগের উপর নির্ভর করে অ্যাপ্লিকেশনটি স্বীকৃতি দেবে যে একটি টোকেন রয়েছে এবং ভুল টোকেন ব্যবহার করে ডেটা পুনরুদ্ধার শুরু করবে। সুযোগটি বেশি যে এটি আজব ত্রুটি সহ ব্যর্থ হবে।

সাধারণভাবে এই সমস্যার সমাধানটি হ'ল বর্তমান কনফিগারেশনটি পূর্বনির্ধারিত কীগুলি উপসর্গ করা। আপনি আপনার কনফিগারেশনের জন্য বিভিন্ন বান্ডিল শনাক্তকারী সেট করে রানটাইমে সহজেই কনফিগারেশনটি সনাক্ত করতে পারেন। তারপরে কেবল এখান থেকে বান্ডিল শনাক্তকারী পড়ুন NSBundle.mainBundle()। আপনার যদি একই বান্ডিল শনাক্তকারী থাকে তবে আপনার পছন্দ মতো বিভিন্ন প্রিপ্রেসেসর ম্যাক্রো সেট করতে হবে

#ifdef DEBUG
  NSString* configuration = @"debug";
#elif RELEASE
  NSString* configuration = @"release";
#endif

সুইফটে এটি দেখতে প্রায় একই রকম হবে:

#if DEBUG
  let configuration = "debug"
#elseif RELEASE
  let configuration = "release"
#endif

8
আপনার সমস্যাগুলি উপস্থিত রয়েছে কারণ আপনি আপনার সমস্ত ডেটা ভাগ করা ইউজারডেফল্টগুলিতে মেশান। আপনার এমন NSUserDefaults.standardUserDefaults()ডেটা ব্যবহার করা উচিত যা ভাগ করা উচিত নয়।
ড্যানিয়েল

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