0Pricing
Kotlin Academy · บทเรียน

API ของแพลตฟอร์ม

เข้าถึงความสามารถดั้งเดิมของระบบ

API ของแพลตฟอร์ม เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน

การเข้าถึงความสามารถของระบบเนทีฟ

โค้ดที่ใช้ร่วมกันจำเป็นต้องเข้าถึงความสามารถของอุปกรณ์ในบางครั้ง ไม่ว่าจะเป็นการจัดเก็บข้อมูล การตั้งค่า นาฬิกา หรือกลไกเครือข่าย KMM มีหลายวิธีในการเข้าถึง API ของระบบเนทีฟอย่างเป็นระเบียบ

expect/actual สำหรับค่าพื้นฐาน

สำหรับค่าจากแพลตฟอร์มที่มีขนาดเล็ก ให้ใช้ expect/actual โค้ดส่วนกลางจะยังคงสะอาด ในขณะที่แต่ละแพลตฟอร์มเติมรายละเอียดที่แตกต่างกัน

// commonMain
expect fun currentTimeMillis(): Long

// androidMain
actual fun currentTimeMillis(): Long = System.currentTimeMillis()

การฉีดการพึ่งพาโค้ดของแพลตฟอร์ม

แนวทางที่ยืดหยุ่นยิ่งขึ้นคือ กำหนดอินเทอร์เฟซในโค้ดส่วนกลาง แล้วฉีดส่วนการทำงานของแพลตฟอร์มจากแต่ละแอปเข้าไป

// commonMain
interface Storage {
    fun save(key: String, value: String)
    fun load(key: String): String?
}

การนำไปใช้งานบน Android

Android นำอินเทอร์เฟซไปใช้งานด้วย SharedPreferences แล้วจัดเตรียมให้โค้ดที่ใช้ร่วมกัน

// androidMain
import android.content.SharedPreferences

class AndroidStorage(private val prefs: SharedPreferences) : Storage {
    override fun save(key: String, value: String) {
        prefs.edit().putString(key, value).apply()
    }
    override fun load(key: String): String? = prefs.getString(key, null)
}

การนำไปใช้งานบน iOS

iOS นำอินเทอร์เฟซเดียวกันไปใช้งานด้วย NSUserDefaults จากเฟรมเวิร์ก Foundation

// iosMain
import platform.Foundation.NSUserDefaults

class IosStorage : Storage {
    private val defaults = NSUserDefaults.standardUserDefaults
    override fun save(key: String, value: String) = defaults.setObject(value, key)
    override fun load(key: String): String? = defaults.stringForKey(key)
}

การเรียกใช้ส่วนติดต่อโปรแกรมประยุกต์ของ iOS

จาก iosMain คุณสามารถเรียกใช้เฟรมเวิร์กของ Apple ได้โดยตรง เพราะ Kotlin/Native สร้างส่วนเชื่อมต่อการทำงานร่วมกันให้กับเฟรมเวิร์กเหล่านั้น

import platform.UIKit.UIDevice

fun deviceModel(): String = UIDevice.currentDevice.model

การเรียกใช้ส่วนติดต่อโปรแกรมประยุกต์ของ Android

androidMain มี SDK ของ Android ให้ใช้งานครบถ้วน เนื่องจากคอมไพล์โดยอ้างอิงกับแพลตฟอร์ม Android

import android.os.Build

fun deviceModel(): String = Build.MODEL

ไลบรารีหลายแพลตฟอร์มสำเร็จรูป

บ่อยครั้งคุณไม่จำเป็นต้องสร้างส่วนเชื่อมต่อการทำงานร่วมกันเอง ไลบรารีต่างๆ มีการห่อหุ้มความสามารถทั่วไปไว้ให้แล้ว:

  • multiplatform-settings — การจัดเก็บข้อมูลแบบคีย์-ค่า
  • Ktor — การเชื่อมต่อเครือข่าย
  • SQLDelight — ฐานข้อมูลภายในเครื่อง

การจัดเตรียมส่วนการนำไปใช้งาน

ฉีดส่วนการนำไปใช้งานของแพลตฟอร์มเมื่อเริ่มต้นแอป โดยทั่วไปจะทำผ่านเฟรมเวิร์ก DI อย่าง Koin เพื่อให้โค้ดที่ใช้ร่วมกันได้รับส่วนที่ถูกต้อง

// Android: provide AndroidStorage(prefs)
// iOS: provide IosStorage()
// Shared Repository(storage) uses whichever was injected

การเลือกแนวทาง

แนวทาง:

  • ค่าขนาดเล็ก → expect/actual
  • การทำงานที่มีหลายเมธอด → อินเทอร์เฟซ + การฉีด
  • ความต้องการทั่วไป → ใช้ไลบรารีหลายแพลตฟอร์มที่มีอยู่แล้ว

ตัวอย่างนามธรรมที่เรียกใช้งานได้

แนวคิดเรื่องอินเทอร์เฟซใช้ Kotlin พื้นฐาน ในที่นี้ การนำไปใช้งานในหน่วยความจำทำหน้าที่แทนแหล่งจัดเก็บข้อมูลของแพลตฟอร์ม

interface Storage {
    fun save(key: String, value: String)
    fun load(key: String): String?
}

class MemoryStorage : Storage {
    private val map = mutableMapOf<String, String>()
    override fun save(key: String, value: String) { map[key] = value }
    override fun load(key: String): String? = map[key]
}

fun main() {
    val s: Storage = MemoryStorage()
    s.save("name", "Ada")
    println(s.load("name"))
}

ตรวจสอบความเข้าใจ

คุณต้องการความสามารถด้านการจัดเก็บข้อมูลที่มีหลายเมธอด ซึ่งนำไปใช้งานแตกต่างกันในแต่ละแพลตฟอร์มและทดสอบได้ง่าย แนวทางใดที่แนะนำ

สรุปทบทวน

คุณสามารถเข้าถึงความสามารถของระบบเนทีฟได้อย่างเป็นระเบียบ:

  • expect/actual สำหรับค่าพื้นฐาน
  • อินเทอร์เฟซส่วนกลาง + การนำไปใช้งานของแพลตฟอร์มที่ฉีดเข้าไปสำหรับการทำงาน
  • การเชื่อมต่อกับระบบอื่นโดยตรงใน androidMain/iosMain
  • นำไลบรารีหลายแพลตฟอร์มกลับมาใช้เมื่อทำได้

เท่านี้ก็จบหลักสูตรพื้นฐาน KMM แล้ว

คำถามที่พบบ่อย

บทเรียน “API ของแพลตฟอร์ม” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “API ของแพลตฟอร์ม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “API ของแพลตฟอร์ม”

เข้าถึงความสามารถดั้งเดิมของระบบ คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “API ของแพลตฟอร์ม” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม

ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. โครงสร้างโปรเจกต์ KMM
  2. expect และ actual
  3. การใช้ตรรกะทางธุรกิจร่วมกัน
  4. API ของแพลตฟอร์ม
← กลับไปที่ Kotlin Academy