Search code examples
iosswiftsygicsygic-mobile-sdk

Sygic issue in showing the map


I have a problem with Sygic maps framework, I tried to show the map using this code in the AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        SYContext.initWithAppKey("mhives.sdk.trial", appSecret: "2nxScQJ0s/J6FsYJ67dlQ+MZLjLzOKc0s96l0t4YyLv2IH8b31b5vWgkzbfgJZ8FYEKQtxpLFGlwyfqEQ64MSQ==") { (initResult) in
        if (initResult == .success) {
            self.window = UIWindow(frame: UIScreen.main.bounds)
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let initialViewController:ViewController = storyboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
            // Set that ViewController as the rootViewController
            self.window?.rootViewController = initialViewController
            self.window?.makeKeyAndVisible()
            initialViewController.sdkDidStart()

        } else {
            print("KO")
        }
    }
        return true
    }

the ViewController.swift

class ViewController: UIViewController,SYMapViewDelegate,SYRoutingDelegate {
let mapView = SYMapView()
let routing = SYRouting()
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    func mapView(_ mapView: SYMapView, didFinishInitialization success: Bool) {
        let tiltFor2D: SYAngle = 0
        mapView.tilt = tiltFor2D
        self.mapView.zoom = 10
        self.mapView.rotation = 180
        self.mapView.geoCenter = SYGeoCoordinate(latitude: 48.147, longitude: 17.101878)!
        self.mapView.frame = self.view.bounds
        view.addSubview(self.mapView)

    }

    func computeRoute(from fromCoordinate: SYGeoCoordinate, to toCoordinate: SYGeoCoordinate) {
        // Create an instance of SYRouting


        // Make self a delegate for SYRouting to receive and handle SYRoutingDelegate responses

        // Create SYWaypoint from coordinate. Set correct SYWaypointType for start and finish.
        let startWaypoint = SYWaypoint(position: fromCoordinate, type: .start, name: nil)
        let endWaypoint = SYWaypoint(position: toCoordinate, type: .end, name: nil)

        // Optionally: create an instance of SYRoutingOptions for configuring computing of a route
        let routingOptions = SYRoutingOptions()
        routingOptions.transportMode = .pedestrian // For other options see SYTransportMode
        routingOptions.routingType = .economic// For other options see SYRoutingType

        // Start computing route
        self.routing.computeRoute(startWaypoint, to: endWaypoint, via: nil, with: routingOptions)
    }

    func routing(_ routing: SYRouting, computingFailedWithError error: SYRoutingError) {
        print(error.rawValue)
    }

    func routing(_ routing: SYRouting, didComputePrimaryRoute route: SYRoute?) {
        SYNavigation.shared().start(with: route)

        // You might want to put it also on the map

        let mapRoute = SYMapRoute(route: route!, type: .primary)
        mapView.add(mapRoute)
    }

Now I try to show simply the Sygic maps but I didn't get it and I receive this message in the debugger "Sygic: W 18/08/19 17:04:51 No SSO session, unable to send http request!"

func sdkDidStart(){

           mapView.delegate = self
            routing.delegate = self

            self.mapView.frame = self.view.bounds
            self.view.addSubview(self.mapView)
            let start = SYGeoCoordinate(latitude: 37.276758, longitude: 9.864160900000002)
            let end = SYGeoCoordinate(latitude: 37.25408, longitude:  9.906733)
            //computeRoute(from: start!, to: end!)
        }

Any help please


Solution

  • First of all do you have valid key and secret? If not you can request one here: https://www.sygic.com/business/request-sygic-mobile-sdk-api-key?product=mobileSdk I understand you are not using real one here in example, but at least the error seems like the one you are using isn't valid.

    The other thing is, when do you initialize your SYMapView? If you load ViewController as initial view controller using storyboard for example, then it will try to load map view instance and all of its underlying components before the SDK is fully loaded. Be careful, you should only work with SDK after it is successfully initialized.

    So check your API keys and try to initialise that view controller in SYContext.initWithAppKey() completion handler.