Android:H5 通过 URL Scheme 拉起app应用

记录一下:task-->通过点击h5链接,拉起目标app

第一:在清单文件中配置,启动的WeekUpActivity

<activity
            <!--要唤起的Activity-->
            android:name=".splash.WeekUpActivity"
            android:exported="true">
            <intent-filter>
                <!--可以根据用户的数据类型,打开相应的Activity-->
                <action android:name="android.intent.action.VIEW" />
                <!--界面可以被隐式调用-->
                <category android:name="android.intent.category.DEFAULT" />
                <!--界面可以通过浏览器的连接启动-->
                <category android:name="android.intent.category.BROWSABLE" />
                <!--协议部分,主要是配置scheme和host-->
                <data
                    android:host="jhq"
                    android:scheme="testclientapp"
                    android:path="/news"
                    android:port="8080"> />
            </intent-filter>
</activity>

第二:格式:scheme://host:port/path   ===》testclientapp://jhp:8080/news

  • 1.在手机微信里,通过微信内部浏览器拉起app
  1. 微信屏蔽了自定义的scheme访问的功能,无法在微信里直接拉起app
  2. 只能通过微信自家应用宝配置的链接,示例:[https://a.app.qq.com/o/simple.jsp?pkgname=包名&channel=1002160650427d595942&fromcase=10001] ,应用宝链接能判断出本地是否安装了该包名app,没安装会引导去应用宝下载,本地安装了会直接拉起app。
  • 2.在浏览器中(搜狗、百度、qq),通过URL Scheme 拉起app

另总结一下:Android拉起app的方法

//通过包名,打开目的app
private void openThirdApp2(){
        Intent intent2 = getPackageManager()
                .getLaunchIntentForPackage("包名");
        String classNameString = intent2.getComponent().getClassName();//得到app类名
        Intent intent  = new Intent();
        intent.setAction(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        intent.setComponent(new ComponentName("包名", classNameString));
        startActivity(intent);
    }


//通过包名,打开目的app
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.PackageManager;

private void openThirdApp1(){
        PackageManager packageManager = getPackageManager();
        Intent intent= packageManager.getLaunchIntentForPackage("包名");
        startActivity(intent);
    }

//可以拉起---发起app和拉起的app不在同一个栈里
private void openThirdApp3(){//可以拉起---发起app和拉起的app不在同一个栈里
        Intent intent = new Intent();
        intent.setData(Uri.parse("testclientapp://jhq:8080/news"));
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }


//可以拉起---但在发起app和拉起的app在同一个栈里
private void openSchema(){//可以拉起---但在发起app和拉起的app在同一个栈里
        Intent it = new Intent();
        it.setAction(Intent.ACTION_VIEW);
        it.setData(Uri.parse("testclientapp://jhq:8080/news"));
        startActivity(it);
    }

参考:

https://www.sunzn.com/2017/07/18/%E4%BD%BF%E7%94%A8-URL-Scheme-%E5%94%A4%E8%B5%B7%E5%BA%94%E7%94%A8%E6%89%93%E5%BC%80-Activity/    使用 URL Scheme 唤起应用打开 Activity

https://blog.csdn.net/qq_40028324/article/details/103078599  关于h5唤起App的方式

https://www.cnblogs.com/shadajin/p/5724117.html  iOS/Android 浏览器(h5)及微信中唤起本地APP

https://blog.csdn.net/wangzunkuan/article/details/95515175  运用scheme协议唤起外部app

https://blog.csdn.net/weixin_43917449/article/details/103393978  Android 使用scheme唤起app本地打开

https://blog.csdn.net/zhaohuiyan9837/article/details/78429079  android点击链接打开应用对应界面  (在应用杀死状态下,打开对应界面后,返回时为了不回到浏览器界面,可以借助TaskStackBuilder来实现(具体用法请查阅相关文档))

https://www.jianshu.com/p/1439c8bbc34b  Android 外部唤起应用跳转指定页面 TaskStackBuilder

https://blog.csdn.net/huaxun66/article/details/78274600  Android应用内跳转Scheme协议

https://github.com/ZHuiYan/WebOpenApp/tree/master   demo

<think>好的,我现在需要帮助用户了解闲鱼APP拉起H5页面scheme格式及配置方法。首先,我应该回忆一下关于scheme的基本知识。Scheme是用于在移动应用中实现深层链接的一种方式,允许通过URL直接打开应用内的特定页面。常见的格式一般是scheme://host/path?query_parameters这样的结构。 接下来,我需要具体查找闲鱼APP的相关信息。由于闲鱼属于阿里巴巴集团,可能他们的scheme设计会遵循集团的规范。比如,淘宝的scheme通常是taobao://或者aliApp://开头,所以闲鱼可能使用类似的格式,比如aliwireless或者yx等前缀。 根据用户提供的引用内容,特别是引用[1]提到的JSON驱动的Form表单系统,可能在配置复杂表单时,H5页面需要与原生应用进行交互,这时候scheme的使用就显得很重要。此外,引用[2]提到的快速查找文件的方法,可能涉及到开发过程中如何配置Xcode或Android Studio中的相关设置,比如Info.plist文件中的URL Scheme声明。 对于iOS和Android同配置方法,需要分别说明。在iOS中,需要在工程的Info.plist文件中添加URL types,定义scheme和identifier。Android则是在AndroidManifest.xml中,对相应的Activity添加intent-filter,设置scheme。 另外,用户可能需要注意权限和安全问题,比如在闲鱼开放平台注册应用获取合法的scheme权限,避免被拦截或滥用。同时,参数传递可能需要按照闲鱼的规定进行编码,比如使用UTF-8,或者特定的参数名如url=后的H5链接需要URL编码。 还需要考虑版本兼容性,同版本的闲鱼APP可能对scheme的支持有所同,建议测试同版本。此外,H5页面应用内的打开方式,可能需要通过WebView组件,或者调用系统浏览器再跳转回应用,这也可能影响scheme的具体实现。 最后,用户可能需要知道如何测试和调试scheme是否生效,比如在手机浏览器中输入完整的scheme链接,查看是否能够正确跳转到闲鱼APP的指定页面。如果出现问题,需要检查scheme的格式是否正确,参数是否传递无误,以及应用是否已经正确配置了相关的intent过滤器。 总结一下,回答的结构应该包括scheme的常见格式、闲鱼可能的特定格式、iOS和Android的配置步骤、参数传递的注意事项、安全权限以及测试方法。同时,需要引用提供的参考资料,特别是关于Form表单和开发工具的部分,来增强回答的可信度。</think>闲鱼APP拉起H5页面scheme格式及配置方法如下: ### 一、Scheme格式规范 1. **基础格式**:`aliwireless://platformapi/startapp?appId=应用ID&url=H5页面地址` - `appId`为在闲鱼开放平台注册的H5应用唯一标识 - `url`参数需进行URL编码,例如:`url=https%3A%2F%2Fexample.com%2Fpage`[^1] 2. **完整示例**: ```bash aliwireless://platformapi/startapp?appId=20230101&url=https%3A%2F%2Fm.taobao.com%2Fh5page ``` ### 二、配置步骤 #### iOS端配置 1. **Xcode工程设置**: - 在`Info.plist`中添加URL Types ```xml <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>aliwireless</string> </array> </dict> </array> ``` 引用Xcode插件配置经验[^2] #### Android端配置 1. **AndroidManifest.xml声明**: ```xml <activity android:name=".H5BridgeActivity"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="aliwireless" android:host="platformapi"/> </intent-filter> </activity> ``` ### 三、参数传递规范 1. **必选参数**: - `appId`:9位数字组成的应用标识 - `ttid`:渠道追踪ID - `_viewType`:页面渲染模式(h5/native) 2. **签名验证**: ```javascript // 示例签名生成逻辑 const sign = md5(appId + timestamp + secretKey) ``` ### 四、注意事项 1. **域名白名单**:需在闲鱼开放平台配置允许访问的H5域名 2. **版本兼容**:`aliwireless` scheme需要闲鱼客户端v7.2.0以上支持 3. **调试工具**:使用`adb shell am start`命令测试Android端跳转
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值