1. 新建android项目,引入YoukuUploadSDK-android jar包
2. 在MainActivity.java文件添加代码如sample.java所示,添加相关参数
3. 文件夹layout下activity_main.xml添加控件
4. 生成代码(xml文件代码)
5. 连接android手机运行android项目生成apk(切记开启开发者选项usb调试等)
6. 授权过程(获取access_token)
7. 点击upload上传
其中第一步我们前面已经说明了,第2-5及7个步骤只要按着它api文档中写的来做一般也不会有问题,这里重点说明下第六步的授权过程,本人也是在第六部上卡住通过不断阅读它提供的文档及互联网查找资料才最终解决,这里写下来方便以后回顾使用,同时也希望能帮助有需要的小伙伴们,废话不多说,下面先说说我的理解过程然后再附上我的实现过程供小伙伴们参考:
通过阅读优酷提供的关于授权机制这块的文档(http://open.youku.com/docs/OAuth2.html)
从图中可以看出我们的项目在上传时需要首先跳转到授权页面来获取授权码,这里我使用一个WebView来显示授权页面,然后,我们可以通过使用授权码来交换令牌即所谓的access_token,最后通过access_token来获取上传的权限,这就是总体的思路,下面来分步详细说明:
参数:
client_id:string 必选参数 appkey
client_secret:string 必选参数 appsecret
grant_type:string 必选参数 对应刷新token时,只支持grant_type=refresh_token
refresh_token:string 必选参数 刷新token(之前登录时调用接口获取的返回字段值),用于获取新的access_token
首先我们通过一个WebView来显示授权页面获取授权码根据优酷文档的说明(http://open.youku.com/docs/api_oauth_code.html)我们需要使用http方法get的方式来获取授权码,所需参数及说明请各位小伙伴查看上面的文档哈,这里就不赘述了,下面看代码:
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<WebView
android:id="@+id/webView1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
代码:
import android.content.Intent;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.feimo.mgrechelper.tools.BaseActivity;
public class GetCodeActivity extends BaseActivity {
private WebView webview;
private String strCode;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.webview); // 设置Web视图
webview =(WebView)findViewByid(R.id.webview1);
//下面这个链接大家可只要把client_id及redirect_uri后面的值换成我们申请优酷开发者帐号时优酷提供的及我们设置的回调地址就可以 ,我的是乱写的
webview.loadUrl("https://openapi.youku.com/v2/oauth2/authorize?client_id=8afc1sdfaqwer1231&response_type=code&redirect_uri=http://www.baidu.com/youku.html&state=xyz");
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
String[] str = null;
str = url.split("=")[1].split("&");
strCode = str[0];
Intent it = new Intent();
it.putExtra("code", strCode);
it.setClass(GetCodeActivity.this, MainActivity.class);
startActivity(it);
return false;
}
});
}
}
通过对方法中url进行解析来获取code码,获得code码后,接下来我们来看下怎么获取access_token码:
首先从优酷api文档我们可以知道,它需要我们通过http的post方法来请求数据,并且返回的是一个json格式的数据,前面我们已经获得了code码,至于其它需要的参数都是我们注册时优酷提供的,下面我们来看下具体的实现:
private String getToken() {
// TODO Auto-generated method stub
String strUrl = "https://openapi.youku.com/v2/oauth2/token";
HttpPost httpPost = new HttpPost(strUrl);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("client_id", client_id));//你申请优酷的client_id
params.add(new BasicNameValuePair("client_secret", client_secret));//你申请优酷的client_secret
params.add(new BasicNameValuePair("grant_type", grant_type));
params.add(new BasicNameValuePair("code", code));//刚刚获取到的code
params.add(new BasicNameValuePair("redirect_uri", redirect_uri));//回调地址,必须跟网站的一样
HttpResponse httpResponse = null;
try {
httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
httpResponse = new DefaultHttpClient().execute(httpPost);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
String result = EntityUtils.toString(httpResponse.getEntity());
System.out.println(result);
JSONObject object = new JSONObject(result);
access_token = object.getString("access_token");//access_token获取成功
return access_token;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
通过上述方法,我们可以很简单地获取优酷上传视频所需要的access_token,获取了access_token以后,我们就可以将access_token设置到params的参数中,这样我们就能实现上传视频到优酷了!