এখানে আইওএস 8+ এর সম্পূর্ণ নির্দেশিকা রয়েছে (এএলএসেটলিবারি ছাড়া):
প্রথমত আমাদের এখনকার মতো ব্যবহারের বিবরণ সরবরাহ করতে হবে এটি পিএইচফটো লাইব্রেরির দ্বারা প্রয়োজনীয় ।
এটি করার জন্য আমাদের info.plist
ফাইলটি খুলতে হবে, কীটি সন্ধান করতে হবে Privacy - Photo Library Usage Description
এবং এর জন্য মান সরবরাহ করতে হবে। যদি কীটি বিদ্যমান না থাকে তবে কেবল এটি তৈরি করুন।
উদাহরণস্বরূপ এখানে একটি চিত্র এখানে রয়েছে:
এছাড়াও নিশ্চিত হয়ে নিন যে কীটির মান ফাইলের Bundle name
মধ্যে খালি নেই info.plist
।
এখন যখন আমাদের বর্ণনা রয়েছে, আমরা সাধারণত requestAuthorization
পদ্ধতি পদ্ধতিতে কল করার মাধ্যমে অনুমোদনের জন্য অনুরোধ করতে পারি :
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
switch (status) {
case PHAuthorizationStatusAuthorized:
NSLog(@"PHAuthorizationStatusAuthorized")
break
case PHAuthorizationStatusDenied:
NSLog(@"PHAuthorizationStatusDenied")
break
case PHAuthorizationStatusNotDetermined:
NSLog(@"PHAuthorizationStatusNotDetermined")
break
case PHAuthorizationStatusRestricted:
NSLog(@"PHAuthorizationStatusRestricted")
break
}
}]
দ্রষ্টব্য 1: requestAuthorization
প্রকৃতপক্ষে প্রতিটি কলে সতর্কতা দেখায় না। এটি একবারে একবারে প্রদর্শিত হয়, ব্যবহারকারীর উত্তর সংরক্ষণ করে এবং আবার সতর্কতা না দেখিয়ে প্রতিবারই এটি ফিরিয়ে দেয়। তবে এটি আমাদের যা প্রয়োজন তা নয়, এখানে একটি দরকারী কোড যা সর্বদা সতর্কতা দেখায় যখনই আমাদের দরকার হয় (সেটিংসে পুনঃনির্দেশ সহ):
- (void)requestAuthorizationWithRedirectionToSettings {
dispatch_async(dispatch_get_main_queue(), ^{
PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
if (status == PHAuthorizationStatusAuthorized)
{
}
else
{
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
if (status != PHAuthorizationStatusAuthorized)
{
NSString *accessDescription = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSPhotoLibraryUsageDescription"];
UIAlertController * alertController = [UIAlertController alertControllerWithTitle:accessDescription message:@"To give permissions tap on 'Change Settings' button" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil];
[alertController addAction:cancelAction];
UIAlertAction *settingsAction = [UIAlertAction actionWithTitle:@"Change Settings" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}];
[alertController addAction:settingsAction];
[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alertController animated:YES completion:nil];
}
}];
}
});
}
সাধারণ সমস্যা 1: কিছু ব্যবহারকারী অভিযোগ করেন যে info.plist
ফাইলটিতে উল্লিখিত পরিবর্তনগুলি করার পরে অ্যাপ্লিকেশন সতর্কতা প্রদর্শন করে না ।
সমাধান: পরীক্ষার Bundle Identifier
জন্য প্রকল্পের ফাইল থেকে অন্য কোনওটিতে পরিবর্তন করার চেষ্টা করুন , অ্যাপটি পরিষ্কার এবং পুনর্নির্মাণ করুন। যদি এটি কাজ শুরু করে তবে সবকিছু ঠিকঠাক, নামটির নতুন নাম দিন।
সাধারণ সমস্যা 2: আনার ফলাফল আপডেট না হওয়াতে কিছু নির্দিষ্ট কেস রয়েছে (এবং সেই ফ্যাচগুলির অনুরোধগুলি থেকে চিত্রগুলি ব্যবহার করে এমন দৃশ্যগুলি ততক্ষণে খালি খালি থাকে) যখন অ্যাপ্লিকেশন ফটোগুলির অনুমতি পায়, যখন এটি ডকুমেন্টেশনের প্রতিশ্রুতি অনুসারে চালিত হয়।
আসলে আমরা যখন WRONG কোড ব্যবহার করি তখন এটি ঘটে :
- (void)viewDidLoad {
if ([PHPhotoLibrary authorizationStatus] != PHAuthorizationStatusAuthorized)
{
[self reloadCollectionView];
} else {
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
if (status == PHAuthorizationStatusAuthorized)
[self reloadCollectionView];
}];
}
}
এই ক্ষেত্রে যদি ব্যবহারকারী অনুমতিগুলি অস্বীকার করে viewDidLoad
তারপরে সেটিংসে ঝাঁপিয়ে পড়ে, মঞ্জুরিপ্রাপ্ত হয় এবং অ্যাপ্লিকেশনটিতে ফিরে যায়, তবে ভিউগুলি রিফ্রেশ হবে না কারণ [self reloadCollectionView]
এবং আনার অনুরোধগুলি প্রেরণ করা হয়নি।
সমাধান: [self reloadCollectionView]
এই জাতীয় অনুমোদনের প্রয়োজন হওয়ার আগে আমাদের কেবল অন্যান্য কল আনার অনুরোধগুলি কল করতে হবে এবং করতে হবে:
- (void)viewDidLoad {
[self reloadCollectionView];
if ([PHPhotoLibrary authorizationStatus] != PHAuthorizationStatusAuthorized)
{
}