Я пытаюсь подписаться на тему через мое приложение для Android.Даже если он успешно подключается, подписка не выполняется.Как только я выполняю вызов по подписке, подключение к IOT не выполняется и выдает журнал ошибок, как указано ниже.Хотите знать, где я сделал неправильное кодирование?Все ресурсы политики IOT предоставляются в целях тестирования, чтобы найти подсказку.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": "*"
}
]
}
Я упомянул AWS-ampify для моей разработки.https://aws -amplify.github.io / docs / android / pubsub
1. Подключение к IOT
private var mAWSMobileClient : AWSMobileClient = AWSMobileClient.getInstance()
private lateinit var mIotDataManager: AWSIotMqttManager
private lateinit var mAttachedPolicyReq: AttachPolicyRequest
private lateinit var mAwsIOTClient: AWSIotClient
private lateinit var mAwsCredentials: AWSCredentials
private fun connectToIOT() {
Thread(Runnable {
var mDeviceIdentity = Settings.Secure.getString(this.contentResolver, Settings.Secure.ANDROID_ID)
mIotDataManager = AWSIotMqttManager(mDeviceIdentity, <iot endpoint>)
mIotDataManager.keepAlive = 50
mIotDataManager.isAutoReconnect = false
mIotDataManager.connectionStabilityTime = 100
mAwsCredentials = mAWSMobileClient.awsCredentials
mAwsIOTClient = AWSIotClient(mAWSMobileClient)
mAwsIOTClient.setRegion(Region.getRegion(Regions.AP_SOUTHEAST_2))
mAttachedPolicyReq = AttachPolicyRequest()
mAttachedPolicyReq.policyName = "test_policy"
mAttachedPolicyReq.target = mAWSMobileClient.identityId
mAwsIOTClient.attachPolicy(mAttachedPolicyReq)
try {
mIotDataManager.connect(mAWSMobileClient, object : AWSIotMqttClientStatusCallback {
override fun onStatusChanged(
status: AWSIotMqttClientStatusCallback.AWSIotMqttClientStatus?,
throwable: Throwable?
) {
when (status) {
AWSIotMqttClientStatusCallback.AWSIotMqttClientStatus.ConnectionLost -> {}
AWSIotMqttClientStatusCallback.AWSIotMqttClientStatus.Connected -> {}
AWSIotMqttClientStatusCallback.AWSIotMqttClientStatus.Connecting -> {}
AWSIotMqttClientStatusCallback.AWSIotMqttClientStatus.Reconnecting -> {}
else -> {
}
}
}
})
} catch (e: Exception) {
Log.d("IOT Data Manager Connection Errror : $e")
}
}).start()
}
Способ подписки
fun subscribeToThing() {
if(mConnected) {
Thread(Runnable {
mThingsName = "$mThingsName/shadow/get/accepted"
var message: String? = null
try {
mIotDataManager.subscribeToTopic(
mThingsName,
AWSIotMqttQos.QOS1,
object : AWSIotMqttNewMessageCallback {
override fun onMessageArrived(topic: String?, data: ByteArray?) {
try {
message = String(data!!, Charsets.UTF_8)
} catch (e: UnsupportedEncodingException) {
Log.d("Unsupported Encoding error :$e")
}
}
})
} catch (e: Exception) {
Log.d("Subscription error :$e")
}
}).start()
} else {
Log.d("IOT Not Connected")
}
}
Журнал результатов:
W / AWSIotMqttManager: соединение потеряно
Ошибка подписки: com.amazonaws.AmazonClientException: ошибка клиента при подписке.