我正在为在线报纸公司开发一个Android应用程序。该公司已经在支持OAuth 2.0的Google App Engine上开发和托管了他们的API 因此,我将开发一个Android应用程序,通过OAuth 2.0支持与其部署的后端API进行通信,并从其分配的Google API Explorer中获取内容Response。
所以根据Android客户端的谷歌云终端文档(比如我的应用程序)尝试通过OAuth 2.0支持对端点进行身份验证调用,我被引导到:
我按照Google Cloud Endpoint网站上的说明操作,但我不了解用于解释的示例代码,所以我尝试了这个:
class EndpointsAsyncTask extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = new AndroidJsonFactory();
try {
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(CLIENT_EMAIL)
.setServiceAccountScopes(Collections.singleton("https://www.googleapis.com/auth/userinfo.email"))
.setServiceAccountPrivateKeyFromP12File(new File("file.p12"))
.build();
/*so now what do I do with the credential object
and how do I set the root URL (https://project-id-endpoints.appspot.com/_ah/api)
that the android client(this android app)
will connect to in the backend API call
*/
}
catch(GeneralSecurityException gse){
gse.printStackTrace();
}
catch(IOException ioe){
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
}
无论何时运行我的代码,Google Developer Console上的日志报告都会显示
&#34; Uauthorised access&#34;意味着身份验证调用无效...
以下是我打开与其中一个API服务内容的GET URL连接的代码:
public String open() throws IOException{
InputStream inputStream = null;
int len = 500;
try {
URL url = new URL("https://project-name-api-endpoints.appspot.com/_ah/api/core/v5.1.1/info/category/en");
URLConnection urlConnection = url.openConnection();
inputStream = urlConnection.getInputStream();
String content = readIt(inputStream, len);
return content;
}//end try
finally {
if(inputStream != null)
{
inputStream.close();
}
}
}
我的问题是:
如何处理凭据对象以及如何在后端API调用中设置android客户端(此Android应用程序)将连接到的根URL(https://project-id-endpoints.appspot.com/_ah/api
)
答案 0 :(得分:1)
问题是您没有使用在调用端点时设置的凭据。您正在建立的这种连接完全没有意识到所有OAuth设置以及您从端点+ Android获得的精彩内容。
理想情况下,您需要做的是:
1)从端点创建Android客户端库(如here所述)。不要制作&#34;手册&#34; (通过URLConenction)调用您的终端,虽然技术上可行,但绝对不推荐。
2)使用项目中包含的libs(jars),您需要做的就是调用您需要的任何方法(如here所述),并且库将根据您的应用包含所有必需的授权标题等设置。您不必担心OAuth的其他任何事情。
提示:确保在Google控制台上的授权中包含所有开发人员的SHA调试签名。如果你不这样做,你只能从你的&#34; prodcution&#34;中调用终点。应用