您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页Android开启芝麻信用人脸识别和结果回调

Android开启芝麻信用人脸识别和结果回调

来源:二三娱乐

在完成调用芝麻信用人脸识别的时候,有一些可以记录下来的内容

/**
* 启动支付宝进行认证
* @param url 开放平台返回的URL
*/private void doVerify(String url) {
    if (hasApplication()) {
        Intent action = new Intent(Intent.ACTION_VIEW);
        StringBuilder builder = new StringBuilder();
      // 这里使用固定appid 20000067
        builder.append("alipays://platformapi/startapp?appId=20000067&url=");
        builder.append(URLEncoder.encode(url));
        action.setData(Uri.parse(builder.toString()));
        startActivity(action);
    } else {
        // 处理没有安装支付宝的情况
        new AlertDialog.Builder(this)
            .setMessage("是否下载并安装支付宝完成认证?")
            .setPositiveButton("好的", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent action = new Intent(Intent.ACTION_VIEW);
                
                startActivity(action);
            }
        }).setNegativeButton("算了", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        }).show();
    }
}

/**
* 判断是否安装了支付宝
* @return true 为已经安装
*/private boolean hasApplication() {
    PackageManager manager = getPackageManager();
    Intent action = new Intent(Intent.ACTION_VIEW);
    action.setData(Uri.parse("alipays://"));
    List list = manager.queryIntentActivities(action, PackageManager.GET_RESOLVED_FILTER);
    return list != null && list.size() > 0;
}

此处是通过服务端返回的url,给到芝麻信用官方给的调用支付宝人脸识别的方法,但是此处的url中包含认证成功或者失败之后回调的地址,其实这边不能叫回调,相当于H5打开app的那种链接URL Scheme
URL Scheme 当前页面发送出去的给支付宝的消息,支付宝如何回复?然后回复还能到达指定界面呢?
在需要调用芝麻信用人脸的页面,在AndroidManifest中配置

  <!--要想在别的App上能成功调起App,必须添加intent过滤器-->
            <intent-filter>
                <!--协议部分,随便设置-->
                <data android:scheme="xl" android:host="goods" android:path="/goodsDetail" android:port="8888"/>
                <!--下面这几行也必须得设置-->
                <category android:name="android.intent.category.DEFAULT"/>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
android:exported="false"
与
<action android:name="android.intent.action.VIEW"/>
冲突,所以不能设置
android:exported="false"
Uri data = getIntent().getData();
String goodsId = data.getQueryParameter("goodsId");

会得到下面数据:

params=YFK2tv7LqO05yH3sYA3XGSzUiEPDuWPk9AuAvT7ufMLscnDtqeSIATBRqZQgPw1dbxzJOCTbXEyCpizTa7hdFqB2FMo6o%2F1hDFjPyHIdkIFEv13Sj8PfCtcN2szcGeJDxmbsN2XoYgadDBFXBg5Y4F2CA4lKeksdotSKAnymaMc%3D&sign=By1D32vhk0QmewDQYQK50dwHtNv73Tdio7PPd%2FvjJJWKhhNCA2kl3hchApqDib4LlLDtDEOQxxLBKujiepjbmQN%2F2N2PNj9lJLluKnpBVEpTMvKbPLhn3opFmbdky%2F9Esj%2BuJRd8HENykCUsUKHXlYpSZKma7K%2F9%2FuTRY2sU%2FPY%3D      

返回的数据需要后端解析,才能得出认证的结果.
最后几个小问题
1.在设置intent-filter中的data的时候,如果是放在app的入口Activity上,host和scheme的首字母要小写,不然会出现app图标找不到的情况
2.如何判断一个Scheme是否有效

PackageManager packageManager = getPackageManager();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("xl://goods:8888/goodsDetail?goodsId=10011002"));
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isValid = !activities.isEmpty();
if (isValid) {
    startActivity(intent);
}

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务