Android के लिए Thread Network का SDK टूल

Thread Network SDK टूल की मदद से, डिजिटल प्लैटफ़ॉर्म पर Keychain की मदद से, आपके Android ऐप्लिकेशन, Thread नेटवर्क के क्रेडेंशियल शेयर कर सकते हैं Google Play सेवाएं. इससे आपके ऐप्लिकेशन, इनसे कोई भी Thread डिवाइस सेट अप कर सकते हैं बिना क्रेडेंशियल और उपयोगकर्ता का डेटा दिखाए.

सिर्फ़ कुछ एपीआई कॉल की मदद से:

  1. Google Play services से, Thread नेटवर्क के पसंदीदा क्रेडेंशियल का अनुरोध करें.
  2. नए बॉर्डर राऊटर सेट अप करें और Google में अपने Thread नेटवर्क के क्रेडेंशियल जोड़ें Play सेवाएं.
  3. अगर आपके पास पहले से ही इन-फ़ील्ड बॉर्डर राऊटर हैं, तो यह देखा जा सकता है कि आपका बॉर्डर राऊटर पसंदीदा नेटवर्क में होते हैं और अगर ज़रूरी हो, तो उन्हें माइग्रेट कर देते हैं.

उपयोगकर्ता और डेवलपर के अलग-अलग अनुभवों पर विचार करना चाहिए. हम इनमें से ज़्यादातर कवर करेंगे के बारे में ज़्यादा जानकारी मिल सकती है.

मुख्य शब्दावली और एपीआई के कॉन्सेप्ट

शुरू करने से पहले, इन शर्तों को समझना ज़रूरी है:

  • Thread नेटवर्क के क्रेडेंशियल: कोड में बदलने वाले Thread TLVs का बाइनरी ब्लॉब Thread नेटवर्क का नाम, नेटवर्क कुंजी, और अन्य प्रॉपर्टी दिए गए Thread नेटवर्क से जुड़ने के लिए, Thread डिवाइस को चुनें.

  • Thread नेटवर्क के लिए पसंदीदा क्रेडेंशियल: अपने-आप चुना गया Thread नेटवर्क ऐसे क्रेडेंशियल जिन्हें अलग-अलग वेंडर के ऐप्लिकेशन के साथ शेयर किया जा सकता है. इसके लिए, वे getPreferredCredentials एपीआई.

  • बॉर्डर एजेंट आईडी: Thread बॉर्डर राऊटर के लिए 16-बाइट का दुनिया भर में इस्तेमाल किया जाने वाला यूनीक आईडी डिवाइस. इस आईडी को बॉर्डर राऊटर वेंडर बनाते और मैनेज करते हैं.

  • Thread Border राऊटर का सेटअप ऐप्लिकेशन: यह आपका Android ऐप्लिकेशन है जो नए Thread बॉर्डर राऊटर डिवाइस को कनेक्ट करता है और Thread नेटवर्क के क्रेडेंशियल को Google Play सेवाएं. आपका ऐप्लिकेशन जोड़े गए ऐप्लिकेशन का आधिकारिक मालिक है क्रेडेंशियल और उन्हें ऐक्सेस कर सकता है.

Thread Network के कई एपीआई, टास्क जो एसिंक्रोनस रूप से पूरा होता है. Google Analytics 4 पर माइग्रेट करने के लिए, addOnSuccessListener और addOnFailureListener का इस्तेमाल करें. ज़्यादा जानकारी के लिए, इस लिंक पर जाएं टास्क दस्तावेज़.

क्रेडेंशियल का मालिकाना हक और उनका रखरखाव

Thread नेटवर्क के क्रेडेंशियल जोड़ने वाला ऐप्लिकेशन, के पास क्रेडेंशियल मौजूद होता है और उसके पास क्रेडेंशियल को ऐक्सेस करने की सभी अनुमतियां होती हैं. अगर आपको अन्य ऐप्लिकेशन के जोड़े गए क्रेडेंशियल ऐक्सेस करने के लिए, आपको PERMISSION_DENIED मिलेगा गड़बड़ी.

ऐप्लिकेशन के मालिक के तौर पर, हमारा सुझाव है कि आप Google पर सेव किए गए क्रेडेंशियल रखें Thread Border राऊटर नेटवर्क के अपडेट होने पर, Play services अप-टू-डेट होती हैं. यह इसका मतलब है कि ज़रूरत पड़ने पर क्रेडेंशियल जोड़े जा सकते हैं, बॉर्डर पर क्रेडेंशियल अपडेट किए जा सकते हैं राऊटर के Thread नेटवर्क के क्रेडेंशियल बदल जाते हैं और Thread बॉर्डर राऊटर को हटा दिया गया है या इसे फ़ैक्ट्री रीसेट कर दिया गया है.

बॉर्डर एजेंट की खोज

क्रेडेंशियल, बॉर्डर एजेंट आईडी के साथ सेव किए जाने चाहिए. आपको यह पक्का करना होगा कि आपका Thread Border राऊटर का सेटअप ऐप्लिकेशन, बॉर्डर एजेंट आईडी का पता लगा सकता है शामिल हैं.

Thread बॉर्डर राऊटर को Thread नेटवर्क की जानकारी का विज्ञापन दिखाने के लिए, mडीएनएस का इस्तेमाल करना होगा. इसमें नेटवर्क का नाम, एक्सटेंडेड पैन आईडी, और बॉर्डर एजेंट आईडी की जानकारी शामिल होती है. कॉन्टेंट बनाने इन एट्रिब्यूट के लिए txt की वैल्यू nn, xp, और id हैं. क्रम से.

Google के बॉर्डर राऊटर वाले नेटवर्क के लिए, Google Play services अपने-आप इस्तेमाल करने के लिए, Google Thread नेटवर्क के क्रेडेंशियल पाएं.

अपने Android ऐप्लिकेशन के साथ SDK टूल को इंटिग्रेट करना

शुरू करने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. यहां दिए गए निर्देशों का पालन करें Google Play services सेट अप करना.

  2. अपनी build.gradle फ़ाइल पर, Google Play services की डिपेंडेंसी जोड़ें:

    implementation 'com.google.android.gms:play-services-threadnetwork:16.0.0'
    
  3. ज़रूरी नहीं: बॉर्डर राऊटर को स्टोर करने के लिए, BorderAgent डेटा क्लास तय करें जानकारी. हम इस डेटा का इस्तेमाल पूरी गाइड में करेंगे:

    data class BorderAgentInfo(
      // Network Name max 16 len
      val networkName: String = "",
      val extPanId: ByteArray = ByteArray(16),
      val borderAgentId: ByteArray = ByteArray(16),
      ...
    )
    

इसके बाद, हम Google News ऐप्लिकेशन में क्रेडेंशियल डालें.

नए बॉर्डर राऊटर के सेटअप

नए बॉर्डर राऊटर के लिए नया नेटवर्क बनाने से पहले, यह ज़रूरी है पसंदीदा नेटवर्क क्रेडेंशियल इस्तेमाल करके देखें. इससे पक्का होता है कि जब भी मुमकिन हो, तब Thread डिवाइसों को एक ही Thread नेटवर्क से कनेक्ट किया जाता है.

getPreferredCredentials को कॉल करने की सुविधा लॉन्च हो गई है कोई गतिविधि, जिसमें उपयोगकर्ताओं को नेटवर्क अनुरोध की अनुमति देने के लिए कहा जाता है. अगर नेटवर्क क्रेडेंशियल, Thread SDK डिजिटल कीचेन में सेव किए गए हैं. वापस आ गए हैं.

क्रेडेंशियल के लिए अनुरोध करें

उपयोगकर्ता को पसंदीदा क्रेडेंशियल के बारे में बताने के लिए:

  1. ActivityLauncher का एलान करें:

    private lateinit var preferredCredentialsLauncher: ActivityResultLauncher<IntentSenderRequest>
    
  2. 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.")
       }
     }
    
  3. 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}]") }
    }
    

नया Thread नेटवर्क बनाएं

अगर उपयोगकर्ता की सेटिंग में, Thread नेटवर्क का कोई पसंदीदा क्रेडेंशियल उपलब्ध नहीं है, तो Thread नेटवर्क. इसके बाद, क्रेडेंशियल जोड़ने के लिए addCredentials API का इस्तेमाल किया जा सकता है Google Play services से शेयर किया जाएगा. ऐसा करने के लिए, आपको एक ThreadBorderAgent, और एक ThreadNetworkCredentials ऑब्जेक्ट भी दें.

बिना किसी क्रम का नेटवर्क बनाने के लिए, newRandomizeBuilder पर कॉल करें:

val threadCredentials = ThreadNetworkCredentials.newRandomizedBuilder().build()

Thread नेटवर्क का नाम डालने के लिए:

val threadCredentials = ThreadNetworkCredentials.newRandomizedBuilder()
  .setNetworkName("ThreadNetworkSDK")
  .build()

क्रेडेंशियल जोड़ें

Thread नेटवर्क के अन्य क्रेडेंशियल उपलब्ध कराने के लिए, हमें उन्हें Google Play services से जोड़ना होगा. इससे पहले कि हम अपना नया क्रेडेंशियल के साथ-साथ, हमें यह भी जानने की ज़रूरत है कि इस Thread में मौजूद कौनसा बॉर्डर राऊटर डिवाइस नेटवर्क इससे संबंधित है.

इस उदाहरण में, हम बॉर्डर एजेंट आईडी से एक ThreadBorderAgent बनाएंगे और आपने अभी-अभी Thread नेटवर्क के नए क्रेडेंशियल पास किए हैं:

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}]") }
}

इन-फ़ील्ड बॉर्डर राऊटर का पता लगाएं और उन्हें माइग्रेट करें

अगर आपके पास अभी इन-फ़ील्ड बॉर्डर राऊटर हैं, तो यह तय करने के लिए isPreferredCredentials कि आपके बॉर्डर राऊटर से जुड़े हैं या नहीं पसंदीदा नेटवर्क पर. यह एपीआई, उपयोगकर्ता की अनुमति लेता है और सेव की गई जानकारी के आधार पर बॉर्डर राऊटर के क्रेडेंशियल की जांच करता है Google Play services में जाकर.

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 पहले ही किसी Thread नेटवर्क और आपको इस Thread नेटवर्क को Google Play services में जोड़ना है अन्य वेंडर के साथ शेयर किया जा सकता है. आपके पास ThreadNetworkCredential बनाने का विकल्प है रॉ थ्रेड ऐक्टिव ऑपरेशनल डेटासेट टीएलवी सूची से इंस्टेंस:

  1. ऑपरेशनल डेटासेट को ByteArray में बदलें. उदाहरण के लिए:

    val activeDataset =
          "0e080000000000010000000300000f35060004001fffe0020833333333...".dsToByteArray()
    
    fun String.dsToByteArray(): ByteArray {
      return chunked(2).map { it.toInt(16).toByte() }.toByteArray()
    }
    
  2. ThreadNetworkCredentials बनाने के लिए, fromActiveOperationalDataset का इस्तेमाल करें. इसके बाद, आपको Thread नेटवर्क का नाम, चैनल, और नेटवर्क की अन्य जानकारी. प्रॉपर्टी की पूरी सूची के लिए, यहां जाएं: ThreadNetworkCredentials.

    val threadNetworkCredentials =
        ThreadNetworkCredentials.fromActiveOperationalDataset(activeDataset)
    Log.d(
        "threadNetworkCredentials",
        threadNetworkCredentials.channel.toString() + " - " + threadNetworkCredentials.networkName)
    
  3. 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}]") }
    

बॉर्डर एजेंट के हिसाब से Thread नेटवर्क के क्रेडेंशियल

बॉर्डर एजेंट आईडी किसी बॉर्डर राऊटर डिवाइस की खास तौर पर पहचान करता है. इस्तेमाल करने के लिए getCredentialsByBorderAgent API का इस्तेमाल करने के लिए, पहले आपको कोई ThreadBorderAgent ऑब्जेक्ट सबमिट करें और बॉर्डर एजेंट आईडी पास करें.

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 की तरह, आप उपयोगकर्ता को बॉर्डर राऊटर के एक्सटेंडेड पैन आईडी के क्रेडेंशियल. कॉन्टेंट बनाने 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}]") }
}

क्रेडेंशियल हटाएं

जब बॉर्डर राऊटर डिवाइस को होम से हटा दिया जाता है या फ़ैक्ट्री रीसेट किया जाता है, तो को Google Play services से अपना Thread नेटवर्क हटाना होगा.

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}]") }
}

संसाधन

Thread Network SDK टूल के बारे में ज़्यादा जानने के लिए, एपीआई का संदर्भ.