Thread Network SDK, dijital ortama benzer bir işleve sahip anahtar zincirini kullanabilirsiniz. Bu özellik, Android uygulamalarınızın Thread ağ kimlik bilgilerini Google Play Hizmetleri. Bu işlem, uygulamalarınızın kimlik bilgileri ve kullanıcı verilerini doğrudan açığa çıkarmadan tüm akıllı ev ekosistemlerini destekler.
Yalnızca birkaç API çağrısıyla şunları yapabilirsiniz:
- Google Play Hizmetleri'nden tercih edilen Thread ağ kimlik bilgilerini isteyin.
- Yeni sınır yönlendiricileri ayarlayın ve Thread ağ kimlik bilgilerinizi Google'a ekleyin Play Hizmetleri.
- Halihazırda saha içi sınır yönlendiricileriniz varsa sınırınızın olup olmadığını kontrol edebilirsiniz. yönlendiriciler tercih edilen ağdadır ve gerekirse bunları taşır.
Göz önünde bulundurulması gereken birkaç kullanıcı ve geliştirici yolculuğu vardır. Risklerin çoğunu diğer temel özellikler ve önerilen kullanımlarla birlikte bu kılavuzda bulabilirsiniz.
Temel terminoloji ve API kavramları
Başlamadan önce aşağıdaki terimleri incelemeniz faydalı olacaktır:
Thread Network Credentials (İş Parçacığı Ağ Kimlik Bilgileri): Kodlayan iş parçacığı TLV'lerinin ikili blob'u belirli bir Thread ağına katılmak için bir Thread cihazı.
Tercih Edilen Thread Ağ Kimlik Bilgileri: Otomatik olarak seçilen Thread ağı kullanılarak farklı tedarikçilerin uygulamalarıyla paylaşılabilecek kimlik bilgileri
getPreferredCredentials
API.Sınır Aracısı Kimliği: İş Parçacığı Yönlendiricisi için 16 baytlık genel olarak benzersiz kimlik olanak tanır. Bu kimlik, sınır yönlendirici satıcıları tarafından oluşturulur ve yönetilir.
Thread Kenarlık Yönlendirici Kurulumu uygulaması: Bu, Android uygulamanızı yapılandırarak Thread ağ kimlik bilgilerini ekler ve Thread ağ kimlik bilgilerini Google Play Hizmetleri. Uygulamanız, eklenen öğenin yetkili sahibidir ve bunlara erişebilmesi gerekir.
Thread Network API'lerinin çoğu bir Görev tamamlanabilmesini sağlar. Tekliflerinizi otomatikleştirmek ve optimize etmek için addOnSuccessListener ve addOnFailureListener kullanabilirsiniz. Daha fazla bilgi edinmek için Görev belgelerinden faydalanabilirsiniz.
Kimlik bilgisi sahipliği ve bakımı
Thread ağ kimlik bilgilerini ekleyen uygulama,
kimlik bilgilerine sahip olması gerekir ve kimlik bilgilerine erişmek için tüm izinlere sahip olmalıdır. Denemek için
diğer uygulamalar tarafından eklenen kimlik bilgilerine erişmek için bir PERMISSION_DENIED
hatası.
Uygulama sahibi olarak, kimlik bilgilerinizi Google'da saklamanız önerilir. İş Parçacığı Yönlendirici ağı güncellendiğinde Play Hizmetleri güncel kalır. Bu gerektiğinde kimlik bilgileri eklemek, sınır olduğunda kimlik bilgilerinin güncellenmesi Thread ağ kimlik bilgileri değiştiğinde ve İş Parçacığı Sınır Yönlendiricisi kaldırıldı veya fabrika ayarlarına sıfırlandı.
Sınır aracısı bulma
Kimlik bilgileri bir Sınır Aracısı Kimliği ile kaydedilmelidir. Her bir web sitesi için İş Parçacığı Yönlendiricisi Kurulum uygulamanız, Sınır Aracısı Kimliklerini sınır yönlendiricinizin bir listesidir.
İş Parçacığı Sınırı Yönlendiricileri, Thread ağ bilgilerini tanıtmak için mDNS kullanmalıdır,
Ağ Adı, Genişletilmiş Kaydırma Kimliği ve Sınır Aracısı Kimliği dahil. İlgili içeriği oluşturmak için kullanılan
bu özelliklere karşılık gelen txt
değerleri şunlardır: nn
, xp
ve id
,
tıklayın.
Google sınır yönlendiricileri olan ağlar için Google Play Hizmetleri otomatik olarak Google Thread ağ kimlik bilgilerini alır.
SDK'yı Android uygulamanıza entegre etme
Başlamak için aşağıdaki adımları tamamlayın:
Şu adreste sağlanan talimatları uygulayın: Google Play Hizmetleri'ni kurun.
Google Play Hizmetleri bağımlılığını
build.gradle
dosyanıza ekleyin:implementation 'com.google.android.gms:play-services-threadnetwork:16.0.0'
İsteğe bağlı: Sınır yönlendiricinin depolanması için bir
BorderAgent
veri sınıfı tanımlayın. ekleyebilirsiniz. Bu verileri bu kılavuz boyunca kullanacağız:data class BorderAgentInfo( // Network Name max 16 len val networkName: String = "", val extPanId: ByteArray = ByteArray(16), val borderAgentId: ByteArray = ByteArray(16), ... )
Daha sonra, tercih edilen uygulamalarınızın eklenmesi ve yönetilmesi için önerilen adımları kimlik bilgileri.
Yeni sınır yönlendiricisi kurulumları
Yeni sınır yönlendiricileri için yeni bir ağ oluşturmadan önce ağ kimlik bilgilerini kullanmayı deneyin. Böylece proje daha Mümkün olduğunda Thread cihazları tek bir Thread ağına bağlanır.
getPreferredCredentials
çağrısı başlatılır
kullanıcılardan ağ isteğine izin vermelerini isteyen bir Etkinlik. Ağ
kimlik bilgileri Thread SDK dijital anahtar zincirinde depolanmıştır. Kimlik bilgileri
uygulamanıza döndürülür.
Kimlik bilgisi iste
Kullanıcıdan tercih edilen kimlik bilgilerini istemek için:
ActivityLauncher
bildiriminde bulunun:private lateinit var preferredCredentialsLauncher: ActivityResultLauncher<IntentSenderRequest>
ThreadNetworkCredentials
olarak döndürülen Etkinlik sonucunu işleme: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
numaralı telefonu arayıp Etkinliği başlatın: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}]") } }
Yeni Thread ağı oluşturma
Kullanıcının
Thread ağı varsa addCredentials
API'yi kullanarak şuraya kimlik bilgisi ekleyebilirsiniz:
Google Play Hizmetleri. Bunun için bir ThreadBorderAgent
oluşturmanız,
ve ayrıca bir ThreadNetworkCredentials
nesnesi sağlar.
Rastgele bir ağ oluşturmak için newRandomizeBuilder
işlevini çağırın:
val threadCredentials = ThreadNetworkCredentials.newRandomizedBuilder().build()
Thread ağ adını belirtmek için:
val threadCredentials = ThreadNetworkCredentials.newRandomizedBuilder()
.setNetworkName("ThreadNetworkSDK")
.build()
Kimlik bilgisi ekleyin
Thread ağ kimlik bilgilerinizi diğer Thread tedarikçi firmaları tarafından kullanılabilir hale getirmek için onları Google Play hizmetlerine eklememiz gerekiyor. Yeni e-postalarımızı eklemeden önce bu Thread'in hangi sınır yönlendirici cihazına ait olduğunu da bilmemiz gerekir. ağın ait olduğu kişidir.
Bu örnekte, Sınır Aracısı Kimliğinden bir ThreadBorderAgent
oluşturacağız ve
yeni oluşturduğunuz Thread ağ kimlik bilgilerini iletin:
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}]") }
}
Saha içi sınır yönlendiricilerini tespit edin ve taşıyın
Saha içi sınır yönlendiricileriniz varsa şunları kullanabilirsiniz:
Sınır yönlendiricilerinizin ait olup olmadığını belirlemek için isPreferredCredentials
. Bu API,
tarafından izin verilmesini sağlar ve sınır yönlendiricisinin kimlik bilgilerini depolananlarla karşılaştırarak kontrol eder.
.
isPreferredCredentails
, eşleşmemiş için 0
, eşleşmemiş durumda ise 1
değerini döndürür.
Int
veri türü olarak eşleşiyor. IsPreferredCredentialsResult
kullanabilirsiniz
ve sonuçlarınızı kontrol edin.
public @interface IsPreferredCredentialsResult {
int PREFERRED_CREDENTIALS_NOT_FOUND = -1;
int PREFERRED_CREDENTIALS_NOT_MATCHED = 0;
int PREFERRED_CREDENTIALS_MATCHED = 1;
}
isPreferredCredentials
özelliğini kullanmak için bir
Önce ThreadNetworkCredentials
nesne. ThreadNetworkCredentials
örneğini oluşturmanın birkaç yolu vardır. Sonraki adımlarda, bu seçenekleri gözden geçireceğiz.
Ağ kimlik bilgilerini Operasyonel Veri Kümesine göre sıralayın
İş Parçacığı Sınırı Yönlendiricinizin önceden bir
Thread ağı ve bu Thread ağını Google Play Hizmetleri'ne eklemek istiyorsunuz
paylaşmak istemezsiniz. ThreadNetworkCredential
oluşturabilirsiniz
ham İş Parçacığı Aktif Operasyonel Veri Kümesi TLV listesinden örnek:
Operasyonel veri kümesini
ByteArray
biçimine dönüştürün. Örneğin:val activeDataset = "0e080000000000010000000300000f35060004001fffe0020833333333...".dsToByteArray()
fun String.dsToByteArray(): ByteArray { return chunked(2).map { it.toInt(16).toByte() }.toByteArray() }
ThreadNetworkCredentials
oluşturmak içinfromActiveOperationalDataset
öğesini kullanın. Başarılı olduğunda Thread ağının adını, Kanalını ve diğer ağ bilgileri. Tesislerin tam listesi için şuraya bakın: ThreadNetworkCredentials.val threadNetworkCredentials = ThreadNetworkCredentials.fromActiveOperationalDataset(activeDataset) Log.d( "threadNetworkCredentials", threadNetworkCredentials.channel.toString() + " - " + threadNetworkCredentials.networkName)
isPreferredCredentials
API'yi çağırın veThreadNetworkCredentials
.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}]") }
Sınır Aracısı'na göre iş parçacığı ağ kimlik bilgilerini
Sınır Aracısı Kimliği, bir sınır yönlendirici cihazını benzersiz şekilde tanımlar. Kullanılacak
getCredentialsByBorderAgent
API'sini kullanmak için öncelikle bir
ThreadBorderAgent
nesnesini tanımlayın ve Sınır Aracısı Kimliğini iletin.
ThreadBorderAgent
nesnesini oluşturduktan sonra şunu çağırın:
getCredentialsByBorderAgent
. Kimlik bilgileri kaydedilmişse doğrulamanın
tercih edilir.
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}]") }
}
Genişletilmiş Kaydırma Kimliği ile ileti dizisi ağ kimlik bilgilerini
getPreferredCredentials
özelliğine benzer şekilde, kullanıcıdan
kimlik bilgilerini bir sınır yönlendiricisinin Genişletilmiş Kaydırma Kimliğinden alır. İlgili içeriği oluşturmak için kullanılan
getCredentialsByExtendedPanId
bir IntentSender
döndürür ve Etkinlik
sonuç, kullanıcı onayladığında bir ThreadNetworkCredentials
nesnesi içerir.
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}]") }
}
Kimlik Bilgilerini Kaldır
Sınır Yönlendirici cihazınız evinizden kaldırıldığında veya fabrika ayarlarına sıfırlandığında, Thread ağını Google Play hizmetlerinden kaldırması gerekiyor.
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}]") }
}
Kaynaklar
Thread Network SDK hakkında daha fazla bilgi edinmek için şuraya bakın: API Referansı.