React Native - Erstellen Sie die Lokalisierungs -Tracking -Bibliothek für iOS
Posted: 21 Mar 2025, 09:18
Ich recherchiere über die Erstellung von Bibliothek für React Native New Arch. Im Moment habe ich es mit dem Erstellen von Recreat-React-nativ-Bibliotheks < /code> zu tun, um eine LIC-Verfolgung von LIOs für eine bessere Anpassung zu erstellen. 0,48.3 < /li>
[*] React-nativ: 0.78.0 < /li>
< /ul>
Mein iOS-Projekt hat bereits: < /p>
[*] React-nativ: 0.78.0 < /li>
< /ul>
Mein iOS-Projekt hat bereits: < /p>
- Hintergrund-Ort-Tracking Enable < /li>
findenund didfailwitherror. />Code: Select all
#import "generated/RNMyLocationTrackingSpec/RNMyLocationTrackingSpec.h" @interface MyLocationTracking : NativeMyLocationTrackingSpecBase @end < /code> MylocationTrack.mm #import #import "MyLocationTracking.h" #import "MyLocationTracking-Swift.h" @implementation MyLocationTracking RCT_EXPORT_MODULE() - (void)setInfo:(nonnull NSString *)baseURL token:(nonnull NSString *)token pushGPSInterval:(double)pushGPSInterval pushGPSDistance:(double)pushGPSDistance integrationId:(nonnull NSString *)integrationId { MyLocationTrackingImpl *swiftInstance = [MyLocationTrackingImpl shared]; [swiftInstance setInfo:baseURL rnToken:token rnPushGPSInterval:pushGPSInterval rnPushGPSDistance:pushGPSDistance rnIntegrationId:integrationId callback:^(NSDictionary *locationData) { [self emitOnLocationChanged:locationData]; }]; } - (nonnull NSNumber *)isProviderEnabled { return @1; } - (nonnull NSNumber *)isServiceRunning { return @1; } - (void)startWatchLocation { [[MyLocationTrackingImpl shared] startWatchLocation]; } - (void)stopWatchLocation { [[MyLocationTrackingImpl shared] stopWatchLocation]; } - (void)updateIntegrationId:(nonnull NSString *)integrationId { [[MyLocationTrackingImpl shared] updateIntegrationId:integrationId]; } - (std::shared_ptr)getTurboModule: (const facebook::react::ObjCTurboModule::InitParams &)params { return std::make_shared(params); } @end < /code> MylocationTrackingImpl.Swift: Dies funktioniert als Brücke, um die Kernstandortverfolgung mit dem objektiven C < /p> zu verbindenimport Foundation @objc public class MyLocationTrackingImpl: NSObject { private let myLocationTrackingCore = MyLocationTrackingCore() // Singleton instance @objc public static let shared = MyLocationTrackingImpl() // Private initializer to enforce singleton private override init() { super.init() print("=== MySingleton initialized! ===") } @objc public func setInfo(_ baseURL: String, rnToken token: String, rnPushGPSInterval pushGPSInterval: Double, rnPushGPSDistance pushGPSDistance: Double, rnIntegrationId integrationId: String, callback: @escaping ([String: Any]) -> Void) { myLocationTrackingCore.setInfo(baseURL, rnToken: token, rnPushGPSInterval: pushGPSInterval, rnPushGPSDistance: pushGPSDistance, rnIntegrationId: integrationId, callback: callback) } @objc public func startWatchLocation() { myLocationTrackingCore.startWatchLocation() } @objc public func stopWatchLocation() { myLocationTrackingCore.stopWatchLocation() } @objc public func updateIntegrationId(_ integrationId: String) { print("Updated Integration ID: \(integrationId)"); } } < /code> MylocationTrackingCore.swift import Foundation import CoreLocation class MyLocationTrackingCore: NSObject, CLLocationManagerDelegate { var locationManager : CLLocationManager = CLLocationManager() var BASE_URL : String = "" var token : String = "" var pushGPSInterval : Double = 10_000 var pushGPSDistance : Double = 0 var integrationId : String = "{}" var pushGPSTimer: Date = Date() var locationCallback: (([String: Any]) -> Void)? func setInfo(_ baseURL: String, rnToken token: String, rnPushGPSInterval pushGPSInterval: Double, rnPushGPSDistance pushGPSDistance: Double, rnIntegrationId integrationId: String, callback: @escaping ([String: Any]) -> Void) { print("= Initializing...."); self.BASE_URL = baseURL self.token = token self.integrationId = integrationId // The minTime is in millisecond, here we need second self.pushGPSInterval = (pushGPSInterval == 0 ? 10_000 : pushGPSInterval) / 1_000 self.pushGPSDistance = pushGPSDistance < 0 ? 0 : pushGPSDistance // Callback self.locationCallback = callback print("Base url : \(self.BASE_URL)"); print("token : \(self.token)"); print("integrationId : \(self.integrationId)"); print("pushGPSInterval : \(self.pushGPSInterval)"); print("pushGPSDistance : \(self.pushGPSDistance)"); print("trigger callback :"); // Callback: try send data if let locationCallback = self.locationCallback { let newLocationData: [String: Any] = [ "lat": 37.7859, "lng": -122.4364, "alt": 15.0, "spd": 6.0, "course": 45.0 ] locationCallback(newLocationData) print("- Location Callback triggered") } else { print("= Location Callback is nil") } // Init Location Manager self.locationManager.delegate = self self.locationManager.distanceFilter = self.pushGPSDistance self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation self.locationManager.requestWhenInUseAuthorization() self.locationManager.requestAlwaysAuthorization() self.locationManager.allowsBackgroundLocationUpdates = true self.locationManager.pausesLocationUpdatesAutomatically = false self.locationManager.activityType = .automotiveNavigation print("= Initialized"); } func startWatchLocation() { if CLLocationManager.locationServicesEnabled() { self.pushGPSTimer = Date().addingTimeInterval(0) self.locationManager.startUpdatingLocation() print("Start location Location"); } } func stopWatchLocation() { if CLLocationManager.locationServicesEnabled() { self.locationManager.stopUpdatingLocation() self.locationManager.delegate = nil print("Stop location tracking") } } func locationManager( _ manager: CLLocationManager, didUpdateLocations locations: [CLLocation] ) { if let userLocation = locations.last { let latitude = String(userLocation.coordinate.latitude) let longitude = String(userLocation.coordinate.longitude) let altitude = String(userLocation.altitude) let speed = String(userLocation.speed) let course = String(userLocation.course) print("===============") print("user latitude = \(latitude)") print("user longitude = \(longitude)") print("user altitude = \(altitude)") print("user speed = \(speed)") print("user course = \(course)") } else { print("===============") print("No valid location data received") } } func locationManager( _ manager: CLLocationManager, didFailWithError error: Error ) { print("===============") print("Error = \(error)") } } < /code> Im Moment kann die LIB: < /p> Swifts Methode von Objective-C richtig aufrufen. MyLocationStrackingCore.Swift Execute, das Symbol ist weg [/list] Das [url=viewtopic.php?t=18916]Problem[/url] ist: [list] Func LOCOPS -LOCTELMANAGER: didupdatelocations