Подписка на тему IOT в Android - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь подписаться на тему через мое приложение для 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: ошибка клиента при подписке.

...