❶ 解决Android11上分享图片失败,微信提示需要使用FileProvider
先看下微信分享错误的提示:
看到这个错误大家第一个可能会想到FileProvider我在AndroidManifest早已配置过了,但是配置了是你可以使用FileProvider存储了应用间共享文件,但是在并不代表你使用了FileProvider,然后了解问题我们就要先了解一个概念 分区存储
Android 10之前,外部存储区的内容主要以两种形式:
在Android 10 中,Google首次引入了 分区存储 ,将公共区域划分成了不同的集合,并且在媒体文件和其他文档之间建立了清楚的分割。经过划分之后应用不可以随意访问外部存储区中的文件,而只能访问媒体文件。
Android 11 (API 级别 30) 进一步增强了平台功能,为外部存储中的应用和用户数据提供了更好的保护。
从 Android 11 开始,使用 分区存储模式 的应用即使拥有 READ_EXTERNAL_STORAGE 权限,也无法再访问外部存储中的任何其他应用的 专属目录 中的文件
受到这一限制的影响,如果你的应用通过第三方 SDK 分享文件 ( 例如分享照片给另一应用上的好友 ) 到其他应用,而这只是将自己专属目录中的文件路径传递给目标应用,目标应用将无法读取该文件。部分分享 SDK 可能没有正确处理这种情形,没有显式报错而只是静默失败 (对方用户都没有意识到这次分享),影响开发者和用户的体验。
FileProvider是Android7就提出的应用间共享文件适配方式,而目前大多数应用和SDK都具备这中方式
如果您的应用需要在 Android 11 上向其他应用分享文件,请检查您使用的第三方分享 SDK 是否支持通过 FileProvider 进行分享 (现在大部分常用的第三方分享 SDK 均已支持)。通过 FileProvider,您的应用能够允许第三方应用读取所分享的文件,而不会受到分区存储的限制
这里微信已经支持通过了FileProvider形式进行分享了,我们可以直接调用
在项目的AndroidManifest.xml添加相关配置,示例如下:
在res/xml目录(如果没有xml目录,则新建一个)下,添加文件file_provider_paths.xml,内容如下:
external-files-path表示通过 Context.getExternalFilesDir(null) 接口获取到的目录下的文件才可被共享,其他未配置的路径均不可被分享。 同样的节点可以配置多个,以支持多个不同的子目录 ,如下所示:
将路径通过FileProvider的接口转换成 content://URI 形式,示例如下:
参考文档 OpenSDK支持FileProvider方式分享文件到微信
❷ 用 微信的 android SDK 怎么分享信息 到微信
用 微信的 android SDK分享信息到微信,方法如下:
1、第一步:登录微信开放平台,必须注册了开发者账号,然后在开放平台添加用于分享信息到微信的Android应用,例如:网络知道APP
2、添加的应用必须审核通过,然后会获取一个APP_ID和一个APP_SECRET,用于在Android应用中使用
3、在微信开发平台“资源下载页面”下载对应的SDK库文件,同时可以下载一个Demo案例
4、想要成功分享信息到微信,比如在Eclipse开发完Android应用后,使用自定义的签名对APP进行签名,然后将签名字符串填写到微信开放平台审核的应用中(这一步很重要),否则频繁闪退,分享信息失败!
❸ Unity 微信登录分享ShareSDK对接流程
官方文档: MobTech ShareSDK文档
ShareSDK可用于多个平台登录和分享,无需再用服务端,本文主要介绍安卓端使用ShareSDK,进行微信登录和分享。
当时使用的是Unity2019.4.5,gradle版本4.0.0。
1、到微信开发平台申请创建应用,申请通过后获得appId,appSecret;
2、到MobTech平台创建应用,获得appKey,appSecret;
按照官方文档步骤对接即可;
1、launcherTemplate.gradle文件,把需要的各平台的appId和appSecret写在里面,在ShareSDKDevInfo.cs里面更改是无效的。
以微信平台为例:
2、如果微信应用正在申请,测试可使用Mob官方demo进行测试:
demo应用包名:cn.sharesdk.demo;
demokey.keystore密钥密码和别名密码,均为123456;
demo应用,Mob的appKey:moba0b0c0d0,appSecret:;
demo应用,微信的appId:wx4868b35061f87885,appSecret:;
3、不需要的平台,可以在ShareSDKDevInfo.cs里的DevInfoSet中注释掉;
1、场景中挂载ShareSDK.cs和MobSDK.cs;
2、使用前,必须要提交ShareSDK隐私协议的授权接口:
3、微信登录,使用ShareSDK的获取用户信息接口即可(只会在第一次跳转到第三方平台进行授权),返回结果包含openId,unionId,nickName等信息:
4、微信分享: