webentwicklung-frage-antwort-db.com.de

requestAlwaysAuthorization zeigt keinen Berechtigungsalarm an

Ich versuche, einige ausgefallene iBeacons ohne Erfolg zu verwenden, kCLAuthorizationStatusNotDmitted die ganze Zeit. Bei anderen Fragen ist es erforderlich, diese Schlüssel zu info.plist hinzuzufügen (einige Fragen besagen eine, andere beide). Gemäß einem Artikel für iBeacons benötige ich die Option Immer.

<key>NSLocationWhenInUseUsageDescription</key>
<string>Nothing to say</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Permiso para acceder siempre</string>

Bei viewDidAppear:

self.locManager = [[CLLocationManager alloc]init];
self.locManager.delegate = self;
[self.locManager requestAlwaysAuthorization];
NSUUID* region1UUID = [[NSUUID alloc]initWithUUIDString:@""]; //ibeacon real UUID between "". Checked it's not nil.

self.beaconRegion = [[CLBeaconRegion alloc]
                                initWithProximityUUID:proximityUUID
                                identifier:@"myCoolString"];

self.beaconRegion.notifyEntryStateOnDisplay = YES;
self.beaconRegion.notifyOnEntry = YES;
self.beaconRegion.notifyOnExit = NO;
[self.locManager startMonitoringForRegion:self.beaconRegion];
[self.locManager startRangingBeaconsInRegion:self.beaconRegion];

Das Symbol wurde erst unter Einstellungen/Datenschutz/Ort angezeigt, nachdem eine der beiden letzten Methoden ausgeführt wurde. Die Warnmeldungsansicht zum Genehmigen von Berechtigungen wird nie angezeigt .. Wenn ich bei den Standorteinstellungen eine manuelle Änderung durchführe und sie überprüfe, ändert sich der Status, aber ein paar Sekunden später löscht Location at Settings den Status "Always" für meine App und verlässt ihn wieder leer Später überprüfe ich ohne Glück

-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {

Irgendwelche Ideen, was fehlt oder ist falsch? Vielen Dank

27
Carlos Pastor

Für iOS 11-Entwickler sollten Sie sich diesen Beitrag ansehen: Location Services funktionieren nicht unter iOS 11 .


TL; DR: Sie benötigen ALLE DREI Positionsschlüssel in der Info.plist:

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>...</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>...</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>...</string>

Zusammen mit InfoPlist.strings-Übersetzungen für mehrsprachige Apps.

30
Elist

Hatte genau das gleiche Problem ..__ Es stellte sich heraus, dass in meinem Fall die NSLocationAlwaysUsageDescription auch in meinen InfoPlist.strings-Lokalisierungsdateien erforderlich war. NSLocationAlwaysUsageDescription in Info.plist war nicht genug ...

19
chris

Ich habe festgestellt, dass, wenn Ihre Instanz von CLLocationManager zerstört wird, bevor die Warnmeldung angezeigt wird, die Warnmeldung nie angezeigt wird.__ In meinem Fall habe ich eine lokale Variable des Ortsmanagers in AppDelegate erstellt, um nach Erlaubnis zu fragen.

CLLocationManager *locationManager = [[CLLocationManager alloc] init];
if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
    [locationManager requestAlwaysAuthorization];
}

Wenn Sie die lokale Variable in eine Instanzvariable ändern, wird die Warnung angezeigt:

@interface AppDelegate () {
    CLLocationManager *_locationManager;
}
@end

_locationManager = [[CLLocationManager alloc] init];
if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
    [_locationManager requestAlwaysAuthorization];
}
13
balkoth

Fügen Sie diese Zeilen einfach Ihrer .plist-Datei hinzu

<key>NSLocationAlwaysUsageDescription</key>
<string>Optional message</string>
7
Artyom Devyatov

Stellen Sie sicher, dass Sie die Schlüssel zur richtigen Info.plist-Datei hinzufügen. Vergessen Sie nicht, dass es eine für Ihre App und eine für AppTest gibt. 

2
Josh B

Swift 3.X Latest Code leicht zu verwenden

import CoreLocation

 public var locationManager = CLLocationManager()

    override func viewDidLoad() {
        super.viewDidLoad()


        locationManager.delegate = self
        locationManager.requestAlwaysAuthorization()
        locationManager.startUpdatingLocation()

}



    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        let altitudeG = locations.last?.altitude
        let longitudeG = locations.last?.coordinate.longitude
        let latitudeG = locations.last?.coordinate.latitude

print("\(altitudeG) \(longitudeG) \(latitudeG)")

    }
2
SwiftDeveloper

Gefunden, in Foren dokumentiert und getestet, handelt es sich um einen mit Objective-C iOS 8 zusammenhängenden Fehler . Der gleiche Code, der in Swift geschrieben wurde, funktioniert einfach. Arbeitender schneller Code, Delegat ist Anruf.

Fügen Sie das Core Location Framework zu Projekteinstellungen/Ziele/Funktionen/Hintergrundmodi hinzu: "Standortaktualisierungen" und "Verwendet Bluetooth LE-Zubehör" Fügen Sie den Schlüssel unter "Info.plist" hinzu

import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate  {

var locManager: CLLocationManager?

override func viewDidLoad() {
    super.viewDidLoad()
    self.locManager = CLLocationManager();
    self.locManager!.delegate = self;
    if (!CLLocationManager.locationServicesEnabled()) {
        println("Location services are not enabled");
    }
    self.locManager!.requestAlwaysAuthorization();
    self.locManager!.pausesLocationUpdatesAutomatically = false;
    let uuidString = ""  // My ibeacon string there
    let beaconIdentifier = "myCompany"
    let beaconUUID:NSUUID = NSUUID(UUIDString: uuidString)
    let beaconRegion:CLBeaconRegion = CLBeaconRegion(proximityUUID: beaconUUID,
        identifier: beaconIdentifier)
    self.locManager!.startMonitoringForRegion(beaconRegion)
    self.locManager!.startRangingBeaconsInRegion(beaconRegion)
    self.locManager!.startUpdatingLocation()
}

Der Dialog erscheint OK

2
Carlos Pastor

Ich hatte kürzlich ein ähnliches Problem mit IOS 11, als ich versuchte, es zu benutzen

locationManager.requestAlwaysAuthorization()

Die Lösung für mich bestand darin, alle 4 Berechtigungen in plist.info hinzuzufügen, um die Warnung zu erhalten:

  • Datenschutz - Standort bei Verwendung Beschreibung der Verwendung
  • Datenschutz - Beschreibung der Standortnutzung
  • Privacy - Location Always Usage Beschreibung
  • Datenschutz - Standort immer und Verwendungszweck Beschreibung
2
Bachir

Versuchen Sie den Update-Standort zu starten (habe mir geholfen)

[self.locationManager startUpdatingLocation];
2

Für iOS 11 ist es wichtig, unten eine neue Berechtigung hinzuzufügen

NSLocationAlwaysAndWhenInUseUsageDescription

zusammen mit der alten Erlaubnis, die ist

NSLocationAlwaysUsageDescription, NSLocationWhenUseUsageDescription

behebung des Problems, dass requestAlwaysAuthorization keine Berechtigungswarnung anzeigt.

0
user3159598

Ich habe dieses Tutorial kopiert ...

http://willd.me/posts/getting-started-with-ibeacon-a-Swift-tutorial

Es hat nicht funktioniert, obwohl das Update sehr einfach war. Erklären Sie es nicht 

let locationManager = CLLocationManager ()

Aber verschieben Sie es als Variable in die Klasse

var locationManager = CLLocationManager ()

Und es funktioniert!!

0
user3069232

Es wird eine Eingabeaufforderung angezeigt, wenn die Standortberechtigung für Ihre App nicht festgelegt ist. Sobald die Standortberechtigung für Ihre Anwendung festgelegt ist, werden nachfolgende Aufrufe nicht angezeigt (und ich glaube nicht, dass API-Rückmeldungen vorliegen Anruf wurde verschluckt). 

Von Apple-Dokumente :

Diskussion Wenn der aktuelle Berechtigungsstatus nicht bestimmt ist, Diese Methode wird asynchron ausgeführt und fordert den Benutzer zur Erteilung von .__ auf. Erlaubnis für die App, Standortdienste zu verwenden. Die Benutzeraufforderung enthält den Text aus dem Schlüssel NSLocationAlwaysUsageDescription in die Info.plist-Datei Ihrer App und die Anwesenheit dieses Schlüssels ist erforderlich beim Aufruf dieser Methode. Nachdem der Status ermittelt wurde, wird der Ort Der Manager liefert die Ergebnisse an den Delegierten locationManager (: didChangeAuthorization :) -Methode. Wenn die aktuelle Der Berechtigungsstatus ist alles andere als notDEST, diese Methode tut nichts und ruft nicht die locationManager (: didChangeAuthorization :) -Methode, mit einer Ausnahme . Wenn Ihre App noch nie eine Autorisierung und die aktuelle .__ angefordert hat. Der Berechtigungsstatus ist berechtigtWennInUse können Sie das .__ aufrufen. einmal versuchen, den Autorisierungsstatus Ihrer App in .__ zu ändern. immer autorisiert.

0
Crag

Bitte überprüfen Sie diese Referenzlink

Es wurden alle Änderungen in Bezug auf iOS 11 beschrieben. Ihr Problem scheint auch einer der beschriebenen Fälle zu sein. Dadurch erhalten Sie möglicherweise eine Vorstellung davon, welche Änderungen Sie in Ihrem Code vornehmen müssen, um das Problem zu beheben.

0