菟盘 - 鸿蒙版百度网盘客户端

时间:2022-09-04 22:58:32

菟盘 - 鸿蒙版百度网盘客户端

介绍

什么是菟盘

菟盘,由百度网盘开放平台提供的API开发的一个百度网盘客户端。

主要提供网盘文件浏览,文件下载等。(100M以下文件不限速,超过100M就是祖传100k/s了,支持会员加速)

百度网盘开放平台

应用主入口

本应用主入口是MainAbility ,当打开应用时,会判断用户是否已登录,未登录会跳转到登录页面,已登录会跳转到主页。

登录界面

登录通过webview来请求百度的access_token

菟盘 - 鸿蒙版百度网盘客户端

接入流程文档

这里需要注意一个细节,官方文档提供的授权地址是PC版的,需要改造一下,来适配手机页面。

原理是先在百度H5端登录,登录完成后重定向至授权地址。

  1. /*
  2. 百度应用信息
  3. */
  4. String YOUR_CLIENT_ID = ""; //填自己的
  5. String YOUR_REGISTERED_REDIRECT_URI = "https://dsttl3.cn/baiduapi.html"; //需要和自己在百度网盘开放平台填写的相同,有个地址就行,不需要在服务器操作。当然也可以在服务器请求token后直接返回。
  6. String YOUR_CLIENT_SECRET = ""; //填自己的
  7.  
  8. /**
  9. * @return 移动端登录授权链接
  10. */
  11.  
  12. public String getLoginUrl(){
  13.  
  14. String url = "https://openapi.baidu.com/oauth/2.0/authorize?response_type=code" +
  15. "&client_id=" +YOUR_CLIENT_ID +
  16. "&redirect_uri=" + YOUR_REGISTERED_REDIRECT_URI +
  17. "&scope=basic,netdisk&force_login=0";
  18. try {
  19. url = URLEncoder.encode(url,"UTF-8");
  20. url = "https://wappass.baidu.com/passport/?login&tpl=wimn&sms=1®type=1&u=" +
  21. url +
  22. "&extrajson=%7b%22src%22%3a%22se_000000%22%7d#/password_login";
  23. return url;
  24. } catch (UnsupportedEncodingException e) {
  25. e.printStackTrace();
  26. return null;
  27. }
  28. }
  29.  
  30. /**
  31. * @return Access_token授权链接
  32. */
  33.  
  34. public String getAccessTokenUrl(String CODE){
  35. return "https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code" +
  36. "&code=" + CODE +
  37. "&client_id=" + YOUR_CLIENT_ID +
  38. "&client_secret=" + YOUR_CLIENT_SECRET +
  39. "&redirect_uri=" + YOUR_REGISTERED_REDIRECT_URI;
  40. }

webview内的操作

  1. WebView webView = (WebView) findComponentById(ResourceTable.Id_login_wv);
  2. webView.getWebConfig().setJavaScriptPermit(true);
  3. webView.setWebAgent(new WebAgent(){
  4. @Override
  5. public boolean isNeedLoadUrl(WebView webView, ResourceRequest request) {
  6. if (request.getRequestUrl().toString().startsWith("https://dsttl3.cn")){ // 这个链接是你所填写的 YOUR_REGISTERED_REDIRECT_URI 这里只写了开头,效果相同
  7. String code = request.getRequestUrl().toString().split("code=")[1];
  8. String Access_token_url = new AppUtils().getAccessTokenUrl(code);
  9. new Thread(new Runnable() {
  10. @Override
  11. public void run() {
  12. try {
  13. OkHttpClient client = new OkHttpClient();
  14. Request request = new Request.Builder().url(Access_token_url)
  15. .header("User-Agent","pan.baidu.com")
  16. .build();
  17. Call call = client.newCall(request);
  18. String accessTokenJson = call.execute().body().string();
  19. AccessToken accessToken = new Gson().fromJson(accessTokenJson, AccessToken.class);
  20. System.out.println(accessToken.getAccess_token());
  21. getUITaskDispatcher().asyncDispatch(new Runnable() {
  22. @Override
  23. public void run() {
  24. Preferences preferences = new DataUtils().getPreferences(getApplicationContext());
  25. preferences.putString("token",accessToken.getAccess_token());
  26. preferences.flush();
  27. Intent intent1 = new Intent();
  28. Operation operation = new Intent.OperationBuilder()
  29. .withBundleName(MyApp.bundleName)
  30. .withAbilityName("cn.dsttl3.tupan.Ability.IndexAbility")
  31. .build();
  32. intent1.setOperation(operation);
  33. startAbility(intent1);
  34. terminateAbility(); //因为登录完成后无需返回改界面,通过 terminateAbility() 方法销毁该界面
  35. }
  36. });
  37. } catch (IOException e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. }).start();
  42. return false;
  43. }
  44. return super.isNeedLoadUrl(webView, request);
  45. }
  46. });
  47. webView.load(new AppUtils().getLoginUrl()); // 这里是上面转换链接的方法

当用户完成登录后,token就保存到本地了。

主页面

使用ListContainer来显示文件列表

菟盘 - 鸿蒙版百度网盘客户端

代码有点多,不在本文介绍了,可以参考ListContainer的相关文档

这里介绍一下防手滑操作

当该应用只有一个界面时,一不小心返回,导致应用直接退出,可以使用这个方法进行一个提醒。

  1. /**
  2. * 防止误退出操作
  3. */
  4. boolean exit = true;
  5. @Override
  6. public boolean onKeyDown(int keyCode, KeyEvent keyEvent) {
  7. if (exit){
  8. new ToastDialog(getContext()).setText("再次返回退出程序").show();
  9. exit = false;
  10. new Thread(new Runnable() {
  11. @Override
  12. public void run() {
  13. Time.sleep(3000);//三秒内再次返回退出程序
  14. exit=true;
  15. }
  16. }).start();
  17. return true;
  18. }else {
  19. return false;
  20. }
  21. }

下载页面

提供两种下载方式,本地下载和Aria2下载

菟盘 - 鸿蒙版百度网盘客户端

解析处理的链接不能直接下载,必需要设置User-Agent字段为pan.baidu.com才能正常下载

怎么获取该应用

1、自己编译,本文附件提供源码

需要修改的地方

  • 包名

config.json 下的bundleName,和cn.dsttl3.tupan目录下MyApp.java的bundleName。不修改导致无法真机运行和页面跳转失败

  • 填写百度开放平台应用信息

cn.dsttl3.tupan.utils 目录下的 AppUtils.java

  1. /*
  2. 百度应用信息
  3. */
  4. String YOUR_CLIENT_ID = ""; //填自己的
  5. String YOUR_REGISTERED_REDIRECT_URI = "https://dsttl3.cn/baiduapi.html"; //需要和自己在百度网盘开放平台填写的相同,有个地址就行,不需要在服务器操作。当然也可以在服务器请求token后直接返回。
  6. String YOUR_CLIENT_SECRET = ""; //填自己的

签名文件

  • 这个需要自己操作

2、下载测试版

不需要自己下载代码进行编译

留言或私信华为账号,我会给你添加测试。然后通过华为官方发送的短信进行下载。

原文链接:https://harmonyos.51cto.com