按照下面的步骤进行Android应用授权
- 到Amazon获取一个apiKey文件
- 你需要声明一个RequestContext的成员变量和创建一个新的类实例。若要创建实例,请将当前应用程序上下文传递到静态工厂方法。初始化最好的地方是在你的Activity的onCreate方法。例如:
private RequestContext mRequestContext;
@Override
protected void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
mRequestContext = RequestContext.create(this);
}
3.创建一个authorizelistenerimpl类
AuthorizeListenerImpl继承AuthorizeListener这个抽象类, 实现它的3个抽象方法。授权成功、失败、取消时会调用对应方法。如下:
private class AuthorizeListenerImpl extends AuthorizeListener {
/* Authorization was completed successfully. */
@Override
public void onSuccess(final AuthorizeResult authorizeResult) {
}
/* There was an error during the attempt to authorize the application. */
@Override
public void onError(final AuthError authError) {
}
/* Authorization was cancelled before it could be completed. */
@Override
public void onCancel(final AuthCancellation authCancellation) {
}
}
4.创建一个authorizelistenerimpl实例并注册它
@Override
protected void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
mRequestContext = RequestContext.create(this);
mRequestContext.registerListener(new AuthorizeListenerImpl());
}
5.重写resume方法
@Override
protected void onResume() {
super.onResume();
mRequestContext.onResume();
}
6.登录Amazon账号代码如下:
final JSONObject scopeData = new JSONObject();
final JSONObject productInstanceAttributes = new JSONObject();
try {
productInstanceAttributes.put("deviceSerialNumber", PRODUCT_DSN);
scopeData.put("productInstanceAttributes", productInstanceAttributes);
scopeData.put("productID", PRODUCT_ID);
AuthorizationManager.authorize(new AuthorizeRequest.Builder(mRequestContext)
.addScope(ScopeFactory.scopeNamed("alexa:all", scopeData))
.forGrantType(AuthorizeRequest.GrantType.ACCESS_TOKEN)
.shouldReturnUserData(false)
.build());
} catch (JSONException e) {
// handle exception here
}
7.创建token获取监听者
public class TokenListener implements Listener<AuthorizeResult, AuthError> {
/* getToken completed successfully. */
@Override
public void onSuccess(AuthorizeResult authorizeResult) {
}
/* There was an error during the attempt to get the token. */
@Override
public void onError(AuthError authError) {
}
}
8.登录成功时获取token
AuthorizationManager.getToken(this, new Scope[] { ScopeFactory.scopeNamed("alexa:all") }, new TokenListener());
9.在tokenListener的onSuccess事件中获取token
/* getToken completed successfully. */
@Override
public void onSuccess(AuthorizeResult authorizeResult) {
String accessToken = authorizeResult.getAccessToken();
}
10.在activity的onstart事件调用AuthorizationManager.getToken来判断是否已经授权
private static final Scope ALEXA_ALL_SCOPE = ScopeFactory.scopeNamed("alexa:all");
@Override
protected void onStart(){
super.onStart();
AuthorizationManager.getToken(this, new Scope[] { ALEXA_ALL_SCOPE }, new TokenListener());
}
得到token就可以使用它去访问AVS