Thread Network SDK มีฟังก์ชันการทำงานที่คล้ายกับ ซึ่งช่วยให้แอป Android แชร์ข้อมูลเข้าสู่ระบบของเครือข่ายเทรดด้วย บริการ Google Play การดำเนินการนี้ช่วยให้แอปของคุณตั้งค่าอุปกรณ์เทรดใดก็ได้จาก ระบบนิเวศสมาร์ทโฮมทั้งหมด โดยไม่เปิดเผยข้อมูลเข้าสู่ระบบและข้อมูลผู้ใช้โดยตรง
เพียงเรียก API เพียงไม่กี่ครั้ง คุณก็จะทำสิ่งต่อไปนี้ได้
- ขอข้อมูลเข้าสู่ระบบเครือข่ายเทรดที่ต้องการจากบริการ Google Play
- ตั้งค่า Border Router ใหม่และเพิ่มข้อมูลเข้าสู่ระบบของเครือข่ายเทรดไปยัง Google บริการ Google Play
- หากมี Border Router ในพื้นที่อยู่แล้ว ให้ตรวจสอบว่า Border Router เราเตอร์อยู่ในเครือข่ายที่ต้องการ และย้ายข้อมูล ถ้าจำเป็น
มีหลายเส้นทางของผู้ใช้และนักพัฒนาซอฟต์แวร์ที่จะต้องพิจารณา เราจะอธิบายเนื้อหาเกือบทั้งหมด ในคู่มือนี้ รวมถึงฟีเจอร์สำคัญอื่นๆ และการใช้งานที่แนะนำด้วย
คำศัพท์หลักและแนวคิดของ API
คุณควรทำความเข้าใจคำศัพท์ต่อไปนี้ก่อนที่จะเริ่มต้น
ข้อมูลเข้าสู่ระบบเครือข่ายเทรด: BLOB ไบนารีของ TLV เทรดที่เข้ารหัส ชื่อเครือข่ายเทรด คีย์เครือข่าย และพร็อพเพอร์ตี้อื่นๆ ที่จำเป็นต้องใช้ อุปกรณ์เทรดเพื่อเข้าร่วมเครือข่ายเทรดที่ระบุ
ข้อมูลเข้าสู่ระบบเครือข่ายเทรดที่ต้องการ: เครือข่ายเทรดที่เลือกโดยอัตโนมัติ ข้อมูลเข้าสู่ระบบที่สามารถแชร์กับแอปของผู้ให้บริการต่างๆ โดยใช้ API
getPreferredCredentials
รหัส Agent ของเส้นขอบ: รหัสที่ไม่ซ้ำกันทั่วโลกขนาด 16 ไบต์สำหรับ Thread Border Router อุปกรณ์ รหัสนี้สร้างและจัดการโดยผู้ให้บริการ Border Router
แอปการตั้งค่า Thread Border Router: นี่คือแอป Android ที่ตั้งค่า อุปกรณ์ Thread Border Router ใหม่และเพิ่มข้อมูลรับรองเครือข่าย Thread ไปยัง บริการ Google Play แอปของคุณเป็นเจ้าของที่ได้รับอนุญาตของ ข้อมูลเข้าสู่ระบบและมีสิทธิ์เข้าถึงข้อมูลดังกล่าว
API เครือข่ายเทรดหลายๆ ตัวแสดงผล งาน ที่ทํางานไม่พร้อมกัน คุณสามารถใช้ addOnSuccessListener และ addOnFailureListener เพื่อลงทะเบียน Callback เพื่อรับผลลัพธ์ ดูข้อมูลเพิ่มเติมได้ที่ งาน เอกสารประกอบ
การเป็นเจ้าของและการบำรุงรักษาข้อมูลเข้าสู่ระบบ
แอปที่เพิ่มข้อมูลเข้าสู่ระบบของเครือข่ายเทรดจะกลายเป็นเจ้าของ
และมีสิทธิ์โดยสมบูรณ์ในการเข้าถึงข้อมูลเข้าสู่ระบบ หากคุณลอง
หากต้องการเข้าถึงข้อมูลเข้าสู่ระบบที่แอปอื่นๆ เพิ่มเข้ามา คุณจะได้รับ PERMISSION_DENIED
ในฐานะเจ้าของแอป เราขอแนะนําให้คุณเก็บข้อมูลเข้าสู่ระบบไว้ใน Google ใช้บริการ Google Play ล่าสุดเมื่ออัปเดตเครือข่าย Thread Border Router ช่วงเวลานี้ หมายถึงการเพิ่มข้อมูลเข้าสู่ระบบเมื่อจำเป็น การอัปเดตข้อมูลเข้าสู่ระบบเมื่อมีเส้นขอบ ข้อมูลเข้าสู่ระบบเครือข่ายเทรดของเราเตอร์เปลี่ยนแปลง และนำข้อมูลรับรองออกเมื่อ Thread Border Router จะถูกนำออกหรือรีเซ็ตเป็นค่าเริ่มต้น
การค้นหา Border Agent
ต้องบันทึกข้อมูลเข้าสู่ระบบด้วยรหัส Border Agent คุณจะต้องตรวจสอบว่า แอป Thread Border Router Setup จะกำหนดรหัส Border Agent ได้ Thread Border Router
Thread Border Router ต้องใช้ mDNS เพื่อโฆษณาข้อมูลเครือข่ายเทรด
ซึ่งรวมถึงชื่อเครือข่าย, รหัส Pan แบบขยาย และรหัส Border Agent
ค่า txt
ที่เกี่ยวข้องสำหรับแอตทริบิวต์เหล่านี้คือ nn
, xp
และ id
ตามลำดับ
สำหรับเครือข่ายที่มี Google Border Router ระบบจะให้บริการ Google Play โดยอัตโนมัติ ขอรับข้อมูลเข้าสู่ระบบเครือข่าย Google Thread เพื่อการใช้งาน
ผสานรวม SDK ในแอป Android
หากต้องการเริ่มต้นใช้งาน ให้ทำตามขั้นตอนต่อไปนี้
ทำตามคำแนะนำที่ให้ไว้ที่ ตั้งค่าบริการ Google Play
เพิ่มทรัพยากร Dependency ของบริการ Google Play ลงในไฟล์
build.gradle
ดังนี้implementation 'com.google.android.gms:play-services-threadnetwork:16.0.0'
ไม่บังคับ: กำหนดคลาสข้อมูล
BorderAgent
เพื่อจัดเก็บ Border Router เราจะใช้ข้อมูลนี้ตลอดทั้งคู่มือนี้data class BorderAgentInfo( // Network Name max 16 len val networkName: String = "", val extPanId: ByteArray = ByteArray(16), val borderAgentId: ByteArray = ByteArray(16), ... )
จากนั้นเราจะไปดูขั้นตอนที่แนะนำเพื่อเพิ่มและจัดการ ข้อมูลเข้าสู่ระบบ
การตั้งค่า Border Router ใหม่
ก่อนที่คุณจะสร้างเครือข่ายใหม่สำหรับ Border Router ใหม่ ให้ลองใช้ข้อมูลรับรองเครือข่ายที่ต้องการก่อน ซึ่งช่วยให้มั่นใจว่า อุปกรณ์เทรดจะเชื่อมต่อกับเครือข่ายเทรดเดียวเมื่อเป็นไปได้
การโทรไปยัง getPreferredCredentials
เปิดอยู่
กิจกรรมที่แจ้งให้ผู้ใช้อนุญาตคำขอเครือข่าย หากเครือข่าย
ซึ่งได้จัดเก็บไว้ในพวงกุญแจดิจิทัลของ Thread SDK ซึ่งเป็นข้อมูลเข้าสู่ระบบ
จะกลับไปยังแอปของคุณ
ขอข้อมูลเข้าสู่ระบบ
วิธีแจ้งให้ผู้ใช้ระบุข้อมูลเข้าสู่ระบบที่ต้องการ
ประกาศ
ActivityLauncher
:private lateinit var preferredCredentialsLauncher: ActivityResultLauncher<IntentSenderRequest>
จัดการผลลัพธ์กิจกรรมที่แสดงผลเป็น
ThreadNetworkCredentials
:preferredCredentialsLauncher = registerForActivityResult( StartIntentSenderForResult() ) { result: ActivityResult -> if (result.resultCode == RESULT_OK) { val threadNetworkCredentials = ThreadNetworkCredentials.fromIntentSenderResultData(result.data!!) Log.d("debug", threadNetworkCredentials.networkName) } else { Log.d("debug", "User denied request.") } }
โทรหา
preferredCredentials
และเปิดกิจกรรม:private fun getPreferredThreadNetworkCredentials() { ThreadNetwork.getClient(this) .preferredCredentials .addOnSuccessListener { intentSenderResult -> intentSenderResult.intentSender?.let { preferredCredentialsLauncher.launch(IntentSenderRequest.Builder(it).build()) } ?: Log.d("debug", "No preferred credentials found.") } .addOnFailureListener { e: Exception -> Log.d(TAG, "ERROR: [${e}]") } }
สร้างเครือข่ายเทรดใหม่
หากไม่มีข้อมูลเข้าสู่ระบบเครือข่ายเทรดที่ต้องการใน
เครือข่ายเทรด จากนั้นคุณสามารถใช้ addCredentials
API เพื่อเพิ่มข้อมูลเข้าสู่ระบบ
บริการ Google Play หากต้องการดำเนินการดังกล่าว คุณจะต้องสร้าง ThreadBorderAgent
และระบุออบเจ็กต์ ThreadNetworkCredentials
ด้วย
หากต้องการสร้างเครือข่ายแบบสุ่ม ให้เรียกใช้ newRandomizeBuilder
:
val threadCredentials = ThreadNetworkCredentials.newRandomizedBuilder().build()
วิธีระบุชื่อเครือข่ายเทรด
val threadCredentials = ThreadNetworkCredentials.newRandomizedBuilder()
.setNetworkName("ThreadNetworkSDK")
.build()
เพิ่มข้อมูลเข้าสู่ระบบ
หากต้องการให้ข้อมูลเข้าสู่ระบบเครือข่ายเทรดของคุณพร้อมใช้งานสำหรับผู้ให้บริการเทรดรายอื่นๆ เราจำเป็นต้องเพิ่มลงในบริการ Google Play ก่อนที่เราจะเพิ่ม ข้อมูลเข้าสู่ระบบ เราจะต้องทราบว่าเทรดนี้ใช้กับอุปกรณ์ Border Router ใด เป็นของเครือข่าย
ในตัวอย่างนี้ เราจะสร้าง ThreadBorderAgent
จากรหัสตัวแทนชายแดน และ
ส่งข้อมูลรับรองเครือข่ายเทรดใหม่ที่คุณเพิ่งสร้าง:
private fun addCredentials(borderAgentInfo: BorderAgentInfo, credentialsToBeAdded: ThreadNetworkCredentials) {
val threadBorderAgent = ThreadBorderAgent.newBuilder(borderAgentInfo.borderAgentId).build()
Log.d("debug", "border router id:" + threadBorderAgent.id)
ThreadNetwork.getClient(this)
.addCredentials(threadBorderAgent, credentialsToBeAdded)
.addOnSuccessListener {
Log.d("debug", "Credentials added.")
}
.addOnFailureListener { e: Exception -> Log.d(TAG, "ERROR: [${e}]") }
}
ตรวจหาและย้ายข้อมูล Border Router ในพื้นที่
หากขณะนี้คุณมี Border Router แบบอยู่ในสนาม คุณสามารถใช้
isPreferredCredentials
เพื่อพิจารณาว่า Border Router ของคุณหรือไม่
ไปยังเครือข่ายที่ต้องการ API นี้จะไม่แจ้ง
เพื่อขอสิทธิ์ และตรวจสอบข้อมูลเข้าสู่ระบบของ Border Router กับข้อมูลที่จัดเก็บไว้
ในบริการ Google Play
isPreferredCredentails
แสดงผล 0
หากไม่ตรงกัน และแสดงผล 1
รายการสำหรับ
ตรงกัน เป็นประเภทข้อมูล Int
คุณใช้ IsPreferredCredentialsResult
ได้
เพื่อตรวจสอบผลลัพธ์
public @interface IsPreferredCredentialsResult {
int PREFERRED_CREDENTIALS_NOT_FOUND = -1;
int PREFERRED_CREDENTIALS_NOT_MATCHED = 0;
int PREFERRED_CREDENTIALS_MATCHED = 1;
}
หากต้องการใช้ isPreferredCredentials
คุณจะต้องสร้าง
ThreadNetworkCredentials
ออบเจ็กต์ก่อน การสร้างอินสแตนซ์ ThreadNetworkCredentials
ทำได้หลายวิธี ในขั้นตอนถัดไป เราจะพูดถึงตัวเลือกเหล่านี้
ข้อมูลเข้าสู่ระบบเครือข่ายเทรดตามชุดข้อมูลการดำเนินการ
มีบางกรณีที่ตั้งค่า Thread Border Router ด้วย
เครือข่ายเทรด และคุณต้องการเพิ่มเครือข่ายเทรดนี้ไปยังบริการ Google Play
เพื่อนำไปแชร์กับผู้ให้บริการรายอื่น คุณสร้าง ThreadNetworkCredential
ได้
อินสแตนซ์จากรายการ TLV ของชุดข้อมูลการดำเนินการเทรดที่ใช้งานอยู่
แปลงชุดข้อมูลการดำเนินการเป็น
ByteArray
เช่นval activeDataset = "0e080000000000010000000300000f35060004001fffe0020833333333...".dsToByteArray()
fun String.dsToByteArray(): ByteArray { return chunked(2).map { it.toInt(16).toByte() }.toByteArray() }
ใช้
fromActiveOperationalDataset
เพื่อสร้างThreadNetworkCredentials
เมื่อทำสำเร็จ คุณจะเห็นชื่อเครือข่าย ช่อง และ ข้อมูลเครือข่ายอื่นๆ ดูรายการที่พักทั้งหมดได้ที่ ThreadNetworkCredentials.val threadNetworkCredentials = ThreadNetworkCredentials.fromActiveOperationalDataset(activeDataset) Log.d( "threadNetworkCredentials", threadNetworkCredentials.channel.toString() + " - " + threadNetworkCredentials.networkName)
เรียกใช้
isPreferredCredentials
API และส่งต่อThreadNetworkCredentials
ThreadNetwork.getClient(this) .isPreferredCredentials(threadNetworkCredentials) .addOnSuccessListener { result -> when (result) { IsPreferredCredentialsResult.PREFERRED_CREDENTIALS_NOT_MATCHED -> Log.d("isPreferredCredentials", "Credentials not matched.") IsPreferredCredentialsResult.PREFERRED_CREDENTIALS_MATCHED -> Log.d("isPreferredCredentials", "Credentials matched.") } } .addOnFailureListener { e: Exception -> Log.d("isPreferredCredentials", "ERROR: [${e}]") }
ข้อมูลเข้าสู่ระบบเครือข่ายเทรดโดย Border Agent
รหัส Border Agent จะระบุอุปกรณ์ Border Router โดยไม่ซ้ำกัน หากต้องการใช้งาน
getCredentialsByBorderAgent
API ก่อนอื่นคุณต้องสร้าง
ThreadBorderAgent
และส่งต่อรหัส Border Agent
เมื่อสร้างออบเจ็กต์ ThreadBorderAgent
แล้ว ให้เรียก
getCredentialsByBorderAgent
หากบันทึกข้อมูลเข้าสู่ระบบแล้ว ให้ตรวจสอบ
หากต้องการ
private fun isPreferredThreadNetworkByBorderAgent(borderAgentInfo: BorderAgentInfo) {
val threadBorderAgent = ThreadBorderAgent.newBuilder(borderAgentInfo.borderAgentId).build()
Log.d("debug", "border router id:" + threadBorderAgent.id)
var isPreferred = IsPreferredCredentialsResult.PREFERRED_CREDENTIALS_NOT_FOUND
var borderAgentCredentials: ThreadNetworkCredentials?
val taskByBorderAgent = ThreadNetwork.getClient(this)
taskByBorderAgent
.getCredentialsByBorderAgent(threadBorderAgent)
.addOnSuccessListener { result: ThreadNetworkCredentialsResult ->
borderAgentCredentials = result.credentials
result.credentials?.let {
taskByBorderAgent.isPreferredCredentials(it).addOnSuccessListener { result ->
isPreferred = result
}
}
}
.addOnFailureListener { e: Exception -> Log.d(TAG, "ERROR: [${e}]") }
}
ข้อมูลเข้าสู่ระบบเครือข่ายเทรดตามรหัสการเลื่อนที่ขยาย
ซึ่งคล้ายกับ getPreferredCredentials
คุณสามารถแจ้งผู้ใช้ให้
ข้อมูลเข้าสู่ระบบจากรหัส Extended Pan ของ Border Router
getCredentialsByExtendedPanId
แสดงผล IntentSender
และกิจกรรม
ผลลัพธ์มีออบเจ็กต์ ThreadNetworkCredentials
เมื่อผู้ใช้อนุมัติ
private fun getCredentialsByExtPanId(borderAgentInfo: BorderAgentInfo) {
ThreadNetwork.getClient(this)
.getCredentialsByExtendedPanId(borderAgentInfo.extPanId)
.addOnSuccessListener { intentSenderResult ->
intentSenderResult.intentSender?.let {
preferredCredentialsLauncher.launch(IntentSenderRequest.Builder(it).build())
}
?: Log.d("debug", "No credentials found.")
}
.addOnFailureListener { e: Exception -> Log.d(TAG, "ERROR: [${e}]") }
}
นำข้อมูลเข้าสู่ระบบออก
เมื่ออุปกรณ์ Border Router ถูกนำออกจากบ้านหรือรีเซ็ตเป็นค่าเริ่มต้น ต้องนำเครือข่าย Thread ออกจากบริการ Google Play
private fun removeCredentials(borderAgentInfo: BorderAgentInfo) {
val threadBorderAgent = ThreadBorderAgent.newBuilder(borderAgentInfo.borderAgentId).build()
Log.d("debug", "border router id:" + threadBorderAgent.id)
ThreadNetwork.getClient(this)
.removeCredentials(threadBorderAgent)
.addOnSuccessListener { Log.d("debug", "Credentials removed.") }
.addOnFailureListener { e: Exception -> Log.d(TAG, "ERROR: [${e}]") }
}
แหล่งข้อมูล
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ SDK เครือข่ายเทรด โปรดดูที่ เอกสารอ้างอิง API