เอกสาร / การตั้งค่า / iOS / HERE

การตั้งค่า HERE

ขั้นตอนการใช้ HERE SDK ผ่าน MapConductor มีการเริ่มต้นด้วย Access Key ID และ Secret สองรายการ

PACKAGE
ios-for-here
API KEY
Key ID + Secret
MIN iOS
16.0
VIEW
HereMapView
ผู้ให้บริการเดียวกัน แพลตฟอร์มอื่นAndroidReact

ก่อนเริ่ม

Xcode 15 ขึ้นไป
บัญชี HERE Platform
Access Key ID และ Secret ของ HERE SDK
Deployment target iOS 16.0 ขึ้นไป
STEP 01

รับข้อมูลรับรอง

  1. เข้าถึง HERE Platform
  2. สร้างโปรเจกต์หรือเลือกโปรเจกต์ที่มีอยู่
  3. สร้าง Access Key สำหรับ HERE SDK
  4. คัดลอก Access Key ID และ Secret
STEP 02

เพิ่มด้วย Swift Package Manager

ป้อน URL ของแพ็กเกจจาก File > Add Package Dependencies ใน Xcode SDK เนทีฟจะถูกเพิ่มเป็นการพึ่งพาโดยอัตโนมัติ ไม่จำเป็นต้องเพิ่มแยกต่างหาก

Package URLSwift Package Manager
https://github.com/MapConductor/ios-for-here
Package.swiftSwift
dependencies: [
    .package(url: "https://github.com/MapConductor/ios-sdk-core", from: "1.3.1"),
    .package(url: "https://github.com/MapConductor/ios-for-here", from: "1.0.0"),
],
targets: [
    .target(
        name: "YourApp",
        dependencies: [
            .product(name: "MapConductorCore", package: "ios-sdk-core"),
            .product(name: "MapConductorForHERE", package: "ios-for-here"),
        ]
    ),
]
STEP 03

เริ่มต้น SDK

เรียก initializeHERE(accessKeyId:accessKeySecret:) เพียงครั้งเดียวก่อนที่จะสร้างมุมมองแผนที่ ฟังก์ชันนี้สามารถโยนข้อผิดพลาดได้ โปรดอย่าละเลยข้อผิดพลาด

MyApp.swiftSwift
import SwiftUI
import MapConductorForHERE

@main
struct MyApp: App {
    init() {
        do {
            try initializeHERE(
                accessKeyId: "YOUR_HERE_ACCESS_KEY_ID",
                accessKeySecret: "YOUR_HERE_ACCESS_KEY_SECRET"
            )
        } catch {
            assertionFailure("Failed to initialize HERE SDK: \(error)")
        }
    }

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
ContentView.swiftSwift
// Alternative: call it from the view's sdkInitialize closure
HereMapView(state: mapState, sdkInitialize: {
    try? initializeHERE(
        accessKeyId: "YOUR_HERE_ACCESS_KEY_ID",
        accessKeySecret: "YOUR_HERE_ACCESS_KEY_SECRET"
    )
})
STEP 04

เพิ่มสิทธิ์ตำแหน่ง (หากจำเป็น)

หากใช้บริการตำแหน่งใน HERE SDK ให้ระบุวัตถุประสงค์ใน Info.plist

Info.plistXML
<key>NSLocationWhenInUseUsageDescription</key>
<string>We need your location to display on the map</string>
LocationManager.swiftSwift
import CoreLocation

final class LocationManager: NSObject, ObservableObject, CLLocationManagerDelegate {
    private let manager = CLLocationManager()

    override init() {
        super.init()
        manager.delegate = self
    }

    func requestPermission() {
        manager.requestWhenInUseAuthorization()
    }
}

ตรวจสอบ

สิ่งที่ควรเห็น

เมื่อแผนที่ HERE ปรากฏและสามารถซูมและเลื่อนได้ ถือว่าเสร็จสิ้น

ContentView.swiftSwiftUI
import SwiftUI
import MapConductorCore
import MapConductorForHERE

struct ContentView: View {
    @StateObject var mapState = HereMapViewState(
        mapDesignType: HereMapDesign.NormalDay,
        cameraPosition: MapCameraPosition(
            position: GeoPoint(latitude: 35.6812, longitude: 139.7671),
            zoom: 12.0
        )
    )

    var body: some View {
        HereMapView(state: mapState)
            .ignoresSafeArea()
    }
}

ดีไซน์แผนที่

HereMapDesign รองรับรูปแบบแผนที่ของ HERE

HereMapDesign
Notes
NormalDay / NormalNight
สไตล์มาตรฐาน กลางวัน/กลางคืน
Satellite
ภาพดาวเทียม
HybridDay
ภาพดาวเทียม + ถนนและป้ายกำกับ
LiteDay
สไตล์กลางวันแบบกระทัดรัด
LogisticsDay
สำหรับโลจิสติกส์
RoadNetworkDay
เน้นเครือข่ายถนน

การแก้ปัญหา

แผนที่ยังคงสีขาวทั้งหมด

  • ตรวจสอบว่า Access Key ID และ Secret ถูกต้อง
  • ตรวจสอบว่ามีการเรียก initializeHERE ก่อนมุมมองแผนที่หรือไม่
  • จับข้อผิดพลาดจากการเริ่มต้นและบันทึกเนื้อหาข้อผิดพลาดลงในบันทึก

การบิลด์ล้มเหลว

  • ล้างโฟลเดอร์บิลด์ (Cmd+Shift+K)
  • ลบ ~/Library/Developer/Xcode/DerivedData และสร้างใหม่
  • อัปเดตการพึ่งพาของ Swift Package Manager หลีกเลี่ยงการใช้ร่วมกับ CocoaPods

ถัดไป

มาร์กเกอร์ เส้นโพลิไลน์ โพลีกอน วงกลม ภาพพื้นดิน เลเยอร์แรสเตอร์ และ InfoBubble สามารถใช้งานได้ผ่าน API ทั่วไป ส่วนรูทรูในโพลีกอนนั้น HERE ไม่รองรับโดยพื้นฐาน จึงมีการสร้างและวาดมาสก์ไทล์ โค้ดผู้เรียกเหมือนกับผู้ให้บริการรายอื่น