IOS 10 में कैमरा और लाइब्रेरी के लिए अनुरोध अनुमति - Info.plist


84

मैंने एक ऐप में WKWebView लागू किया है। दिखाए गए वेब पेज में एक फ़ाइल इनपुट है जहां उसे फ़ोटो से एक छवि आयात करनी चाहिए। जब भी मैं उस इनपुट पर प्रेस करता हूं और या तो "टेक फोटो" या "फोटो लाइब्रेरी" का चयन करता हूं, तो एप्लिकेशन अचानक दुर्घटनाग्रस्त हो जाता है, जो मुझे विश्वास है कि एप्लिकेशन को या तो फोटो लेने या लाइब्रेरी से आयात करने की अनुमति याद आ रही है।

उपयोगकर्ता द्वारा बताई गई विधियों (टेक फोटो या फोटो लाइब्रेरी) में से किसी एक का चयन करने पर मैं एक अनुमति अनुरोध को कैसे धकेलूं?

मैं WKWebView के साथ स्विफ्ट 3.0 का उपयोग करता हूं।


1
@ किरीटमोदी हाय, बहुत बहुत धन्यवाद। क्या आप कृपया इसे उत्तर के रूप में पोस्ट कर सकते हैं ताकि मैं इसे स्वीकार कर सकूं।
आलमरी

1
ओकी .. आई विल ...
किरीट मोदी

FYI करें: UIImagePickerController डॉक्स को इस iOS10 + आवश्यकता के लिए कभी भी अपडेट नहीं किया गया था (मैंने हर पेज को स्किम्ड किया है, जिसमें लीगेसी ऑब्जेक्टिव-सी डॉक्स भी शामिल हैं)
benc

जवाबों:


104

आपको Info.plist में नीचे दी गई अनुमति को जोड़ना होगा। अधिक सन्दर्भ

कैमरा :

Key       :  Privacy - Camera Usage Description   
Value     :  $(PRODUCT_NAME) camera use

तस्वीर :

Key       :  Privacy - Photo Library Usage Description    
Value     :  $(PRODUCT_NAME) photo use

मैं अभी भी IOS के लिए विशेष रूप से अपनी मूल भाषाओं, उद्देश्य-सी और स्विफ्ट के लिए नया हूं। इसने मेरा दिन बचाया .. बहुत बहुत धन्यवाद
Alamri

नमस्ते, मुझे वास्तव में फोटो लाइब्रेरी की अनुमति से iPhone7 उपयोगकर्ताओं को प्राप्त करने में परेशानी हो रही है। जब iPhone7 उपयोगकर्ता अपने फोन पर मेरी ऐप सेटिंग में जाते हैं, तो फोटो लाइब्रेरी विकल्प गायब होता है। मेरे पास कुंजी है: मेरी जानकारी में उपरोक्त मूल्य। अजीब हिस्सा आईओएस 10 चलाने वाले सभी उपकरणों को इस विकल्प को देखने में सक्षम है, iPhone7 उपयोगकर्ताओं को छोड़कर। iOS 10 चलाने वाले iPhone6 ​​उदाहरण के लिए इस विकल्प को देख सकते हैं। क्या मुझे कुछ और याद आ रहा है?
देवकाली

1
आपको इन मानों में PRODUCT_NAME शामिल नहीं करना चाहिए, क्योंकि यह पहले से ही Apple संदेश में शामिल है। उदाहरण के लिए "ऐप का नाम" आपकी तस्वीरों तक पहुंचना
हैरिस

122

आप प्रोग्रामेटिक रूप से एक्सेस के लिए भी अनुरोध कर सकते हैं, जिसे मैं पसंद करता हूं क्योंकि ज्यादातर मामलों में आपको यह जानना होगा कि आपने एक्सेस लिया या नहीं।

स्विफ्ट 4 अपडेट:

    //Camera
    AVCaptureDevice.requestAccess(for: AVMediaType.video) { response in
        if response {
            //access granted
        } else {

        }
    }

    //Photos
    let photos = PHPhotoLibrary.authorizationStatus()
    if photos == .notDetermined {
        PHPhotoLibrary.requestAuthorization({status in
            if status == .authorized{
                ...
            } else {}
        })
    }

आप कोड साझा नहीं करते हैं, इसलिए मुझे यकीन नहीं हो सकता है कि यह आपके लिए उपयोगी होगा, लेकिन सामान्य रूप से इसका उपयोग एक सर्वोत्तम अभ्यास के रूप में किया जाता है।


4
धन्यवाद, इस जवाब ने मेरे लिए काम किया! स्विफ्ट 4 का उपयोग करने वाले लोगों के लिए मुट्ठी लाइन को बदल दिया जाना चाहिए: "AVCaptureDevice.requestAccess (के लिए: AVMediaType.video) {प्रतिक्रिया"।
केविन

1
इस उत्तर के लिए धन्यवाद। यह पूरी तरह से काम करता है। मैं हालांकि इसके बारे में एक बात सोच रहा था। जब आप अनुरोध चलाते हैं। यह किसी तरह का श्रोता बनाता है जो तब तक प्रतीक्षा करता है जब तक कि यह कोड चलाने से पहले अनुमति निर्धारित न हो जाए? पहले हालांकि मैं उस कोड का निष्पादन केवल PHPhotoLibrary.authorizationStatus पर रोक देता था लेकिन प्रिंट स्टेटमेंट का एक गुच्छा छोड़ने के बाद ऐसा लगता है जैसे यह चलता रहता है ??
जॉर्ज केंड्रस

4
स्विफ्ट 3 : AVCaptureDevice.requestAccess(forMediaType: AVMediaTypeVideo) { response in। भूलना मत import AVFoundation
iurii

2
जवाब के लिए धन्यवाद। इसके बिना मेरा ऐप अस्वीकार कर दिया गया था, क्योंकि ऐप बिना अनुमति के फोटो लाइब्रेरी तक पहुंच सकता था।
मकाले १le ’

41

फ़ाइल: Info.plist

कैमरा

<key>NSCameraUsageDescription</key>
<string>camera description.</string>

तस्वीरें

<key>NSPhotoLibraryUsageDescription</key>
<string> photos description.</string>

तस्वीरें सहेजें

  <key>NSPhotoLibraryAddUsageDescription</key>
  <string> photos add description.</string>

स्थान

<key> NSLocationWhenInUseUsageDescription</key>
<string> location description.</string>

Apple संगीत:

<key>NSAppleMusicUsageDescription</key>
<string>My description about why I need this capability</string>

पंचांग

<key>NSCalendarsUsageDescription</key>
<string>My description about why I need this capability</string>

महोदय मै

<key>NSSiriUsageDescription</key>
<string>My description about why I need this capability</string>

27

ऊपर वर्णित उपयुक्त सेटिंग्स और उचित एक्सेसर (AVCaptureDevice या PHPhotoLibrary) का उपयोग करें, लेकिन उन्हें भी सचेत करें और सेटिंग्स में भेजें यदि आपको वास्तव में इसकी आवश्यकता है, तो जैसे:

स्विफ्ट 4.0 और 4.1

func proceedWithCameraAccess(identifier: String){
    // handler in .requestAccess is needed to process user's answer to our request
    AVCaptureDevice.requestAccess(for: .video) { success in
      if success { // if request is granted (success is true)
        DispatchQueue.main.async {
          self.performSegue(withIdentifier: identifier, sender: nil)
        }
      } else { // if request is denied (success is false)
        // Create Alert
        let alert = UIAlertController(title: "Camera", message: "Camera access is absolutely necessary to use this app", preferredStyle: .alert)

        // Add "OK" Button to alert, pressing it will bring you to the settings app
        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
          UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!)
        }))
        // Show the alert with animation
        self.present(alert, animated: true)
      }
    }
  }

20

फ़ाइल: Info.plist

के लिए कैमरा :

<key>NSCameraUsageDescription</key>
<string>You can take photos to document your job.</string>

के लिए फोटो लाइब्रेरी , तो आप इस एक एप्लिकेशन को उपयोगकर्ता फोटो लाइब्रेरी ब्राउज़ करने के लिए अनुमति देने के लिए चाहते हैं।

<key>NSPhotoLibraryUsageDescription</key>
<string>You can select photos to attach to reports.</string>

14

स्विफ्ट 5 प्रोग्राम के बिना अनुमतियों को जोड़ने का सबसे आसान तरीका है, अपनी जानकारी खोलना। जानकारी फ़ाइल और सूचना संपत्ति सूची के आगे + का चयन करना। गोपनीयता विकल्पों में ड्रॉप डाउन सूची के माध्यम से स्क्रॉल करें और कैमरा तक पहुंचने के लिए गोपनीयता कैमरा उपयोग विवरण या फोटो लाइब्रेरी तक पहुंचने के लिए गोपनीयता फोटो लाइब्रेरी उपयोग विवरण का चयन करें। आपके द्वारा अपना चयन किए जाने के बाद दाईं ओर स्ट्रिंग मान भरें, अलर्ट पॉप अप की अनुमति के लिए पाठ को अपने उपयोगकर्ता के लिए प्रदर्शित करना चाहते हैं।कैमरा / फोटो लाइब्रेरी की अनुमति


11

आपको इस कोड (स्विफ्ट 3) को जोड़ने के लिए आवश्यक फोटो ऐप की अनुमति मांगने के लिए :

PHPhotoLibrary.requestAuthorization({ 
       (newStatus) in 
         if newStatus ==  PHAuthorizationStatus.authorized { 
          /* do stuff here */ 
    } 
})

<key>NSPhotoLibraryUsageDescription</key> <string>You can select photos to attach to reports.</string>info.plist में जोड़ना मत भूलना
marcomoreira92

निकला हुआ किनारा, मेरे पास कोई मुद्दा नहीं है। मैंने इस कोड को एक बटन में जोड़ा है और मैं परीक्षण के लिए iOS 10.3.1 के साथ अपने iphone का उपयोग कर रहा हूं और यह ठीक काम करता है
marcomoreira92

3

मैंने एक एक्सटेंशन लिखा है जो सभी संभावित मामलों को ध्यान में रखता है:

  • यदि एक्सेस की अनुमति है, तो कोड onAccessHasBeenGrantedचलाया जाएगा।
  • यदि पहुंच निर्धारित नहीं है, तो requestAuthorization(_:)कहा जाएगा।
  • यदि उपयोगकर्ता ने आपके ऐप फोटो लाइब्रेरी एक्सेस से इनकार कर दिया है, तो उपयोगकर्ता को सेटिंग्स पर जाने और एक्सेस की अनुमति देने के लिए एक विंडो ऑफ़र दिखाया जाएगा। इस विंडो में, "रद्द करें" और "सेटिंग" बटन उसके लिए उपलब्ध होंगे। जब वह "सेटिंग" बटन दबाएगा, तो आपकी एप्लिकेशन सेटिंग खुल जाएगी।

उपयोग उदाहरण:

PHPhotoLibrary.execute(controller: self, onAccessHasBeenGranted: {
    // access granted... 
})

एक्सटेंशन कोड:

import Photos
import UIKit

public extension PHPhotoLibrary {

   static func execute(controller: UIViewController,
                       onAccessHasBeenGranted: @escaping () -> Void,
                       onAccessHasBeenDenied: (() -> Void)? = nil) {

      let onDeniedOrRestricted = onAccessHasBeenDenied ?? {
         let alert = UIAlertController(
            title: "We were unable to load your album groups. Sorry!",
            message: "You can enable access in Privacy Settings",
            preferredStyle: .alert)
         alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
         alert.addAction(UIAlertAction(title: "Settings", style: .default, handler: { _ in
            if let settingsURL = URL(string: UIApplication.openSettingsURLString) {
               UIApplication.shared.open(settingsURL)
            }
         }))
         controller.present(alert, animated: true)
      }

      let status = PHPhotoLibrary.authorizationStatus()
      switch status {
      case .notDetermined:
         onNotDetermined(onDeniedOrRestricted, onAccessHasBeenGranted)
      case .denied, .restricted:
         onDeniedOrRestricted()
      case .authorized:
         onAccessHasBeenGranted()
      @unknown default:
         fatalError("PHPhotoLibrary::execute - \"Unknown case\"")
      }
   }

}

private func onNotDetermined(_ onDeniedOrRestricted: @escaping (()->Void), _ onAuthorized: @escaping (()->Void)) {
   PHPhotoLibrary.requestAuthorization({ status in
      switch status {
      case .notDetermined:
         onNotDetermined(onDeniedOrRestricted, onAuthorized)
      case .denied, .restricted:
         onDeniedOrRestricted()
      case .authorized:
         onAuthorized()
      @unknown default:
         fatalError("PHPhotoLibrary::execute - \"Unknown case\"")
      }
   })
}

0

स्विफ्ट 5 , आईओएस 13 में कैमरा सत्र को लागू करने का शानदार तरीका

https://github.com/egzonpllana/CameraSession

कैमरा सत्र एक iOS ऐप है जो AVCaptureSession के कार्यान्वयन का सबसे सरल संभव तरीका बनाने की कोशिश करता है।

एप्लिकेशन के माध्यम से आप इन कैमरा सत्र को लागू कर सकते हैं:

  • चित्र लेने या वीडियो रिकॉर्ड करने के लिए मूल कैमरा।
  • फ़ोटो और वीडियो आयात करने का मूल तरीका।
  • लाइब्रेरी से एक या अधिक संपत्ति का चयन करने के विकल्प के साथ फ़ोटो और वीडियो जैसी परिसंपत्तियों का चयन करने का कस्टम तरीका।
  • बटन और रिकॉर्ड को दबाए रखने के विकल्पों के साथ फ़ोटो (वीडियो) या वीडियो लेने के लिए कस्टम कैमरा।
  • अलग कैमरा अनुमति अनुरोध।

कस्टम कैमरा में टॉर्च और कैमरा विकल्पों को घुमाने की सुविधा है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.