首先附上Demo地址,大家可以去GitHub上面下载https://github.com/GitLGH/AlipayDemo

一:思路总结

蚂蚁金融开发平台上面对于支付宝登录授权部分使用的原生android方式进行配置的,而当前项目采用Hbuilder mui的方式,mui框架没有集成支付宝登录授权功能,这就需要我们使用H5+sdk的第二个用途,即通过原生代码扩展HTML5+ runtime的功能。

第一步: 那么首先第一步就是要把现有的Hbuilder项目集成到android的原生工程当中,这时候需要我们仔细阅读Dcloud的官方文档(关于H5+sdk的部分),官方文档写的实在是太草率了,对于我这种java后台开发人员来说就是看不懂啊,坚持看了三遍才把整篇文章看完,(说实话,看了三遍还是不是很明白),不过幸运的是我在官方文档中找到了这样的一个位置,有图有真相。

http://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/13232)使用新版 5+SDK创建最简Android原生工程

按照这个步骤创建完之后,现有的Hbuilder项目就成功集成到原生android中了,在创建期间会需要sdk的包,需要在http://ask.dcloud.net.cn/article/103位置将最新的sdk下载下来。(这个里面不但包含最新的sdk还包含官方的demo)。

第二步:那就是思考如何将支付宝登录授权集成进来了,首先我到蚂蚁金服开发者平台申请了App支付宝登录功能(需要签约),点击App支付宝登录功能进入之后(也可以直接访问https://docs.open.alipay.com/218/105326/),在快速接入的第三步集成并配置sdk中,讲解了如何集成客户端sdk,官方文档提到,无线账户授权与App支付共用同一个SDK,集成SDK的详细方法与支付一样,请参考支付的接入配置流程iOS集成流程详解Android集成流程详解,我们点击Android集成流程详解链接,进入android集成讲解,按照步骤配置并且下载官方demo,有图有真相。

接入完sdk之后我们回到app支付宝登录的解说文档中,有图有真相。

但是很坑的是这里只是说了调用String authV2(String info)方法,根本没说在哪里调用,怎么调用,幸好我们下载了官方的demo,于是我开始研究官方的demo,首先将demo引入到android studio中,将其运行起来,走一下步骤,然后去看demo的源代码,在demo的PayDemoActivity的类中,我们找到了支付宝账户授权业务示例,有图有真相。

这时候又出现了一个问题,那就是我的Hbuilder项目的的支付宝登录的按钮,在js里面如何调用原生android里面的java代码那? 于是我又回到了Dcloud的官方文档的H5+sdk的部分,看到里面有一个H5+插件开发,里面说到了js和原生代码之间的交互,有图有真相。

于是仔细读了官方文档,真心还是看不太懂啊,官方给了具体的事例代码,但是根本没说具体的调用过程,没办法只能看看在第一步下载的最新sdk的那个包,里面有插件开发的demo,然后又在网上查一查看看有没有那个大神做过这种插件开发,果真让我查到了,在这个https://www.jianshu.com/p/e14cd2c26ec0网址里面,有一位大神做了总结,结合网上的总结和官方的demo例子,终于有了思路,于是开始按照官方的方式开始配置,以下总结一下配置过程:1、创建扩展插件JS API(这里使用异步形式)

     document.addEventListener( "plusready",  function(){var _BARCODE = 'Alipay',---data目录下properties里面配置的名字B = window.plus.bridge;var ALipayPlugin ={/*//同步alipayLogin : function (Argus){return B.execSync(_BARCODE, "alipayLogin", [Argus]);}*///异步alipayLogin : function (Argus1, successCallback, errorCallback ){var success = typeof successCallback !== 'function' ? null : function(args){successCallback(args);},fail = typeof errorCallback !== 'function' ? null : function(code){errorCallback(code);};callbackID = B.callbackId(success, fail);return B.exec(_BARCODE, "alipayLogin(方法名)", [callbackID, Argus1]);}};window.plus.Alipay = ALipayPlugin}, true );

2、在Android工程的assets\data\properties.xml文件中声明插件类别名和Native层扩展插件类的对应关系

 <feature name="Alipay" value="com.example.H5PlusPlugin.AlipayFeature"></feature>

3、编写插件类

public class AlipayFeature extends StandardFeature {

  public void alipayLogin(IWebview iWebview, JSONArray jsonArray) {String url=null;JSONObject retJSONObj=null;try {url = jsonArray.getString(1);Log.e("badge", "url=" + url);//  Toast.makeText(iWebview.getContext(), "url=" + url, Toast.LENGTH_SHORT).show();//调用支付宝的官方demo里面的登录授权方法 //异步方式JSUtil.execCallback(pWebview, CallBackID, newArray, JSUtil.OK, false);返回到js的调用部分
} catch (JSONException e) {e.printStackTrace();}}
}

4、js实现调用插件,前提需要在mainfest.json文件中加入配置插件名称(也就是分配权限)

调用

  mui.plusReady(function () {document.getElementById('Alipay').addEventListener('tap',   function() {

plus.Alipay.alipayLogin(‘传入插件数据’, function( result ) {
   //成功之后异步带回来的数据加入判断
   if(result!=null&&result!=''){
        alipay(result);//授权之后的处理函数—自定义的
   }
 },function(result){//失败情况的函数
   window.location.href ="error.html";
 });

})}

注意:支付宝官方demo调用authV2是通过AuthTask对象,这个对象创建时需要activity对象,在支付宝demo中activity是原生android传入的,而插件开发这里是通过js到达原生插件部分的,所以activity需要手动获取。

AuthTask authTask = new AuthTask(activity);
// 调用授权接口,获取授权结果
Log.e("authV2","456");
Map<String, String> result = authTask.authV2(url, true);

获取可以使用下面的的方法。直接放到插件类中即可。

public  Activity getActivity() {
    Class activityThreadClass = null;
    try {
        activityThreadClass = Class.forName("android.app.ActivityThread");
        Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(null);
        Field activitiesField = activityThreadClass.getDeclaredField("mActivities");
        activitiesField.setAccessible(true);
        Map activities = (Map) activitiesField.get(activityThread);
        for (Object activityRecord : activities.values()) {
            Class activityRecordClass = activityRecord.getClass();
            Field pausedField = activityRecordClass.getDeclaredField("paused");
            pausedField.setAccessible(true);
            if (!pausedField.getBoolean(activityRecord)) {
                Field activityField = activityRecordClass.getDeclaredField("activity");
                activityField.setAccessible(true);
                Activity activity = (Activity) activityField.get(activityRecord);
                return activity;
            }
        }
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    }
    return null;
}

Android平台以WebView方式集成H5+SDK和支付宝登录授权插件开发思路总结相关推荐

  1. android sdk 封装html5,Android平台以WebView方式集成HTML5+SDK方法

    HTML5+ SDK 可以按照"独立应用"和"单页面"两种种方式进行集成,两种集成方式各有优点. 独立应用集成方式:即Widget集成方式,开发者在集成后可在需 ...

  2. 【H5+ Quick-cocos2dx整合】之iOS 二 集成H5+ SDK

    下载SDK 下载HTML 5+ 离线打包SDK (http://ask.dcloud.net.cn/article/103)点击下载SDK 下载完成后打开可以看到SDK.demo.Feature-iO ...

  3. 跨平台应用开发进阶(四十六)webview方式嵌套H5应用加载慢解决方案

    文章目录 一.前言 二.优化建议 三.实施方案 3.1 优化项目结构,减小项目组包体积 3.2 去除项目冗余字体文件 3.2.1 字体筛选 3.2.2 字体压缩 3.3 gzip压缩 3.4 ETag ...

  4. [原]详解如何将cocos2dx项目编译到Android平台上的(方式一:Cywin+NDK)

    链接地址:http://m.blog.csdn.net/blog/yhc13429826359/29357815 2014-6-8阅读578 评论0 前言:cocos2dx作为一个开源的移动2D游戏框 ...

  5. Android集成微信SDK扫码登录功能

    最近做一个android项目,需求是登录页面加入微信二维码扫码登录入口(类似于PC端扫一扫登录),用户打开微信APP,扫描二维码,点击登录即可.当时也看了官网的相关介绍,确实踩了不少坑,写这个博客记录 ...

  6. 阿里短信平台初步使用(无账户可以用支付宝登录)

    一.登录阿里云开发者平台,查看手册 1.网址:https://developer.aliyun.com/service 2.找到下图地区,点击进入 3.进去后翻到2/3处,点击图中所示处.进入可查看开 ...

  7. Android平台上集成乐橙SDK

    这篇文章,就Android平台上如何集成乐橙SDK进行讲解. 前言: 乐橙是浙江大华技术股份有限公司旗下的一家专注视频智能硬件,视频云和视频智能技术,为视频应用提供云视频能力的服务商. 我们接入乐橙设 ...

  8. ios html5上架,iOS原生集成H5+详细流程

    iOS原生集成H5+ 集成方式 独立应用方式集成 Widget方式集成 WebView方式集成 可以打开官方链接: 选择 5+SDK -> 5+SDK集成 -> 平台 下查看集成方式 独立 ...

  9. Android平台上集成萤石SDK

    这篇文章,就Android平台上如何集成萤石SDK进行讲解. 前言: 萤石是海康威视集团旗下的一家做视频云的公司.我们接入萤石设备,实现实时预览.远程回放.抓图.切换画质等功能. 关于具体如何接入,包 ...

最新文章

  1. docker 核心概念整理
  2. 一般单纯形法的matlab程序,实验报告(单纯形法的matlab程序)
  3. 16行代码AC_蓝桥杯 2017年C组第三题 算式900(暴力解法+DFS解法)
  4. 服务器虚拟化的毕业设计,基于Vmware的服务器虚拟化管理毕业论文.doc
  5. java 分裂数字_分裂的补充:超越数字,打印物理可视化
  6. php正文重复度,百度如何判断网页文章的重复度?两个页面相似度确认方法介绍...
  7. hive mysql元数据表说明
  8. 解决方案大全ImportError: libta_lib.so.0: cannot open shared object file: No such file or directory
  9. 可视化驱动治理:公共交通系统的可视化实践
  10. c++线程间通信的几种方法_JAVA并发之线程amp;进程
  11. java 新手入门电子书_3款针对初学者的免费Java电子书
  12. [渝粤教育] 四川农业大学 农业气象学 参考 资料
  13. 109.数组中的最长山脉
  14. Word——怎么在word中插入特殊符号圈4
  15. Pandas 01- Series
  16. (C#)Windows Shell 外壳编程系列总结
  17. 赵小楼《天道》《遥远的救世主》解读(40)芮伟峰的“父爱”和芮小丹的“活出自我”
  18. 自动驾驶平台Apollo 5.5阅读手记:Cyber RT中的任务调度
  19. springboot部署到centos访问不成功
  20. 三线金叉选股公式,均线、成交量、MACD共振

热门文章

  1. 浅谈基于openssl的多级证书,Multi-level CA的签发和管理,以及双向认证
  2. DNS是什么?怎样设置DNS?
  3. 【java】JavaFX从零开始实现拼图小游戏
  4. 【游戏测评】《海盗来了》:四手终与双拳难辨
  5. pytorch b站练习-5
  6. 2020年拼多多校招面试题及答案-最全最新-持续更新中(2)
  7. js 三个点(...),扩展运算符说明
  8. pchip和spline区别
  9. 5和6 objbc oracle_《Oracle Database 12c完全参考手册(第7版)(试读版)》
  10. idea设置-目录结构