摘要:本文介绍编写Android Studio程序通过调用阿里云OpenAPI来实现物联网平台具体操作时,遇到的Specified access key is not found问题解决方法。

OpenAI API Embedding 服务接口_android studio


OpenAPI 是阿里云产品提供的开放应用程序接口(API本来就是Application Program Interface之意)。开发者可以通过编程的方式来使用阿里云产品提供的服务,相比于控制台,使用 OpenAPI 具有规模化、自动化、定制化的优势,自己的业务通过OpenAPI上云,具有相当竞争力。

阿里云为开发者提供了多种编程语言(Java、C#、Go、Python、Node.js/TypeScript、PHP、C++ 等)的 SDK、CLI 来简化 OpenAPI 的使用过程。

本文介绍的就是在Android Studio下编程调用OpenAPI遇到问题的解决方法。


问题截图如下:通过com.aliyun.iot20180120.Client调用API操作物联网设备时,遇到Specified access key is not found问题,仔细检查,自己的accesskey设置的是正确的,而且用账号在线调用也没问题,就是不知道为什么。

OpenAI API Embedding 服务接口_android studio_02

流程分析


 OpenAPI通信流程如下图所示:客户端首先通过AS AK两个参数访问OpenAPI,通过“认证”后,就可以调用任何可以用的接口方法来控制物联网平台上的相应设备了。控制的时候,会发送一些参数,例如iot实例等公共参数,还有具体物模型操作的参数,例如物模型设置中的Items等。

OpenAI API Embedding 服务接口_OpenAPI_03

问题分析


从字面意思看,Specified access key is not found就是AccessKey认证没通过,也就是进门第一步都没有过去。后面的步骤更不能完成了。

导致这个问题的原因可能有2个:

第一,用户名和密码错了。

第二,该用户的权限不够,也就是说密码是对的,但有可能没有物联网平台的权限。

操作回顾


为了解决这个问题,还得回顾一下我们每一个操作步骤,调试程序的经验告诉我们,每一个被忽略的细节,都可能是引起故障的原因。

首先用户名和密码不可能错,因为都是复制粘贴的。

OpenAI API Embedding 服务接口_开发者_04

点击之后,会提示“继续使用AccessKey”和“开始使用子用户AccessKey”两个按钮。我当时觉得直接继续使用,权限应该很高,起码比子账户要高。所以忽略了子账户,其实原因真的是子账户。

OpenAI API Embedding 服务接口_android studio_05

 我们选择继续使用,但是发现AccessKey的说明里,对这里创建的账户,说明有完全的权限,怎么可能没有物联网权限呢?但实际应用中,它就是提示访问权限有问题。My!!!完全权限也能访问不了?也会出现权限问题?

OpenAI API Embedding 服务接口_物联网_06

为了验证这些账户是不是有权限,用这些账户在线调试,在这里是没有问题的。包括几个月前的账户,以及刚刚建立的账户,都可以正常工作。下面是OpenAPI在线调试的情况,填写几个参数就能在线调试。用的是默认的账户。

阿里云 OpenAPI 开发者门户

OpenAI API Embedding 服务接口_物联网_07

也就是说,这些顶级的账户和密码没有错误,也拥有相当高的权限。理论上不会有问题。

OpenAI API Embedding 服务接口_开发者_08

和在线调试有区别的,就是我用的是安卓系统,编写的是安卓APP,调用OpenAPI功能。

那么这里会存在问题吗?也就是安卓系统会导致程序不能正常工作吗?

一般来说是不会的。否则那么多的智能家居就不能正常工作了。

如何解决?


那么就只剩下最不可能的原因了:顶级账户没有权限,子账户才有权限。怎么可能!!!!

OpenAI API Embedding 服务接口_开发者_09

不可能也跑一跑。首先进入访问控制的页面。点击“用户”

OpenAI API Embedding 服务接口_阿里云_10

 点击新建的子账户,然后赋予物联网平台权限。赋予权限的功能比较简单。

OpenAI API Embedding 服务接口_物联网_11

方法如下图所示。可以搜索“iot”来,选择自己需要的权限,我用的是物联网平台权限。这样就可以实现所有的物联网平台的操作了。

OpenAI API Embedding 服务接口_阿里云_12

测试结果:搞定!

没想到用这个拥有物联网平台的子账户能够访问。下图是android studio模拟器运行效果。在真机上运行的效果是一样的。问题得到了解决。

OpenAI API Embedding 服务接口_开发者_13

尽管问题得到了解决。但是为什么AccessKey ID 和 AccessKey Secret 作为访问阿里云 API 的密钥,具有该账户完全的权限,反而无法正常访问,原因不得而知。

不过,子账户的安全性更高,问题能够解决总是好事。