DCloud旗下的uni-app如何判断是否安装腾讯QQ微信微博支付宝淘宝客户端

遇到的问题

最近,在用uni-app混合方式开发app,在做微信授权登录的时候,要判断手机里面是否安装有微信客户端,如果没有安装提示用户「未安装微信客户端或版本过低」。刚开始用uniapp,很多语法都不太熟悉,心想,这个这么常用的判断,随便搜索引擎一搜不就有了。正所谓面向百度编程,没有什么能难倒程序员的。结果一搜就懵了,不信你搜搜看,「uniapp判断是否安装微信」,完全找不到想要的。我还是不死心,搜索引擎没有,官网总会有吧。去官网找了一圈,还是没有找到,心灰意冷。

解决方案

说实话,我也不记得是怎样找到这个方法的,方法非常简单,以下是官方介绍。如果需要看代码示例,请关注公众号longyoung,回复「uni判断微信」,即可获取我写的代码片段截图,有不明白的也可以在公众号提问。

官方介绍(传送门)

判断第三方程序是否已存在

Boolean plus.runtime.isApplicationExist(appInf);

1.0说明:

如果第三方程序已安装则返回true,未安装则返回false。

1.1参数:

appInf: ( ApplicationInf ) 必选 要判断第三方程序的描述信息

Android平台需要通过设置appInf的pname属性(包名)进行查询。iOS平台需要通过设置appInf的action属性(Scheme)进行查询,在iOS9以后需要添加白名单才可查询,在manifest.json文件plus->distribute->apple->urlschemewhitelist节点下添加(如urlschemewhitelist:[“weixin”]).

1.2返回值:

Boolean : 第三方程序已安装则返回true,否则返回false。

常用平台

判断其他应用是否安装,可以用对应的pname和action来判断。以下是一些常用平台的pname和action。

平台pnameaction
微信com.tencent.mmweixin://
QQcom.tencent.mobileqqmqq://
新浪微博com.sina.weibosinaweibo://
淘宝com.taobao.taobaotaobao://
支付宝com.eg.android.AlipayGphonealipay://
京东com.jingdong.app.mallopenApp.jdMobile://
优酷com.youku.phoneyouku://
高度地图com.autonavi.minimapiosamap://
百度地图com.baidu.BaiduMapbaidumap://

PS:本文原创发于微信公众号longyoung,关注并回复「51电子书」免费领取程序员必读经典电子书。

<think>我们正在讨论在uni-app中配置Android分享功能时,需要在AndroidManifest.xml文件中声明com.tencent.tauth.AuthActivity的问题。这个Activity通常用于腾讯开放平台(如QQ分享)的授权登录。在uni-app中使用分享功能,特别是QQ分享,需要正确配置这个Activity。 在uni-app项目中,AndroidManifest.xml文件位于原生工程目录中。对于uni-app,我们通常通过以下方式配置: 1. 在HBuilderX中,我们可以使用原生插件或直接在manifest.json中配置,但manifest.json中的配置最终会生成到原生的AndroidManifest.xml中。 2. 对于QQ分享,我们通常需要配置AuthActivity。根据腾讯开放平台的要求,我们需要在AndroidManifest.xml中添加如下代码: ```xml <activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true"> <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="tencent你的AppId" /> <!-- 这里需要替换成你的QQ互联AppID --> </intent-filter> </activity> ``` 注意:需要将`android:scheme`中的“你的AppId”替换为你在腾讯开放平台申请的应用的AppID(注意是AppID,不是AppKey)。 在uni-app中,我们可以通过以下步骤配置: 1. 在manifest.json文件中,找到“App模块配置”中的“Share(分享)”,勾选QQ分享,并填写AppID和AppKey。 2. 但是,这样配置后,uni-app在打包时可能会自动生成上述Activity声明。然而,有时候如果自动生成不成功,或者我们需要自定义,就需要手动在原生工程中配置。 3. 对于使用HBuilderX云打包的情况,我们可以在项目的`nativeResources`目录下创建Android原生资源目录,然后手动配置AndroidManifest.xml文件。 具体步骤如下: - 在项目根目录下创建`nativeResources`目录(如果不存在)。 - 在`nativeResources`目录下创建`android`目录。 - 在`android`目录下创建`AndroidManifest.xml`文件(注意:这个文件不是完整的AndroidManifest.xml,而是需要补充的内容,打包时会合并)。 - 在`AndroidManifest.xml`文件中添加上述Activity声明。 例如,项目结构如下: ``` 项目根目录 |-- nativeResources |-- android |-- AndroidManifest.xml ``` 然后在`AndroidManifest.xml`文件中写入: ```xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="your.package.name"> <application> <activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true"> <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="tencent你的AppId" /> <!-- 替换为你的QQ互联AppID --> </intent-filter> </activity> </application> </manifest> ``` 注意:上面的`package`属性需要替换为你应用的包名,或者也可以不写,因为打包时会自动合并。 另外,确保在腾讯开放平台申请应用时,填写的包名和签名与uni-app应用的一致。 这样配置后,重新打包,生成的apk中就会包含这个Activity声明。 如果遇到分享后回调不成功的问题,除了检查Activity声明,还需要检查在QQ开放平台配置的Android应用签名和包名是否正确。签名可以使用腾讯提供的签名生成工具获取。 总结步骤: 1. 在manifest.json中配置QQ分享的AppID和AppKey。 2. 在nativeResources/android/AndroidManifest.xml中手动添加AuthActivity的声明,并替换正确的AppID。 3. 确保腾讯开放平台应用信息中的包名和签名正确。 这样,QQ分享功能应该可以正常使用了。 相关问题: 1. 如何在uni-app中配置微信分享? 2. 如何获取Android应用的签名? 3. 在uni-app中,如何调试分享功能?</think>在 uni-app 中配置 Android 分享功能时,声明 `com.tencent.tauth.AuthActivity` 是集成 QQ/腾讯系分享的关键步骤。以下是完整配置流程: ### 配置步骤 1. **修改 AndroidManifest.xml** 在 `/nativeResources/android` 目录下创建或修改 `AndroidManifest.xml`: ```xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application> <!-- 添加腾讯QQ分享所需的Activity --> <activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- 替换为你的QQ AppID --> <data android:scheme="tencent[你的QQ AppID]" /> </intent-filter> </activity> </application> </manifest> ``` 2. **配置 manifest.json** 在 uni-app 项目的 `manifest.json` 中添加 QQ 分享配置: ```json { "app-plus": { "distribute": { "android": { "permissions": [ "<uses-permission android:name=\"android.permission.INTERNET\"/>" ], "schemes": [ "tencent[你的QQ AppID]" // 与AndroidManifest中的scheme一致 ] } }, "sdkConfigs": { "share": { "qq": { "appid": "[你的QQ AppID]", "appkey": "[你的QQ AppKey]" } } } } } ``` ### 关键说明 1. **AppID 获取**: - 需在 [腾讯开放平台](https://open.tencent.com/) 注册应用 - 获取 QQ AppID 和 AppKey(注意不是微信AppID) 2. **Scheme 格式**: - `tencent` 后直接拼接 AppID(无空格) - 示例:AppID 为 `123456` → `tencent123456` 3. **回调处理**: 在 `onShow` 生命周期处理分享回调: ```javascript onShow() { plus.share.getServices(services => { services.forEach(service => { if (service.id === 'qq') { service.authResult(res => { console.log('QQ分享回调', res) }) } }) }) } ``` ### 常见问题解决 1. **回调不触发**: - 检查 `scheme` 是否腾讯后台登记的包名一致 - 确认 AppID 在 manifest 和代码中完全一致 - Android 11+ 需在 `AndroidManifest.xml` 添加: ```xml <queries> <package android:name="com.tencent.mobileqq" /> </queries> ``` 2. **包名校验失败**: - 腾讯后台登记的包名需与 `manifest.json` 的 `id` 字段完全一致 - 云打包时包名格式:`uni.UNI[APPID]` 3. **权限缺失**: 确保 AndroidManifest 包含: ```xml <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> ``` > 官方文档参考:[uni-app 分享模块配置指南](https://nativesupport.dcloud.net.cn/AppDocs/usemodule/shareModule)[^1] --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值