十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Android 微信分享遇到的问题:
创新互联建站是一家专业提供黔江企业网站建设,专注与网站设计制作、成都网站制作、HTML5建站、小程序制作等业务。10年已为黔江众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
1.APP_ID是否输入正确
2.官网申请时输入的签名和打包的签名是否一致(请用微信推荐的签名工具对比)
注:微信平台填写的签名是ce187ed67e05c2d8879bf66bbfdfc8b9
是apk的keystore的md5去掉冒号,大写换位小写字母形式
3.分享一闪而过
有可能的bug:签名错误,appid正确,但是申请的时候吧包名和签名写反了
微信缓存问题,重新安装微信多试几次
4.请用微信官方提供的签名获取工具
5.自己直接run到手机运行的apk包注意签名应该和申请时用的签名一致(即把debug的签名改为release的)
6.分享图片的缩略图太大,超过32k
7.换设备,重新尝试
8.保证所有配置没有问题的情况下,尝试重启手机即可……(我没有开玩笑)
使用微信SDK分享WXAppExtendObject数据给好友,好友点击跳转MyApp的某个页面(需要在分享时传递构造跳转Intent的参数)。
1.该类型的分享(具体请参考微信分享SDK)可以带几个参数,参数中必须附带一些构造跳转Intent的数据。
2.好友点击分享的内容,回调IWXAPIEventHandler接口的类的onReq方法,具体为
ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:这种情况才会调用,此时可以取出分享时附带在参数中的一些数据,构造一个跳转Intent,调用startActivity(intent) 来打开MyApp。
由于是项目实测,这种实现方式的截图也就不传了。
问题1:该分享方式只能分享给好友,不能分享到朋友圈。
问题2:如果好友没安装MyApp,点击微信中好友分享过来的消息后无反应,无法提醒“未安装MyApp,请下载”,因为这些逻辑要实现的话本身就是在MyApp里面写的,原本没装的话根本无法检测。
问题3:WXAppExtendObject类型的分享,数据有大小限制,
extInfo(String)限制2KB;
fileData(byte[])供第三方使用的文件二进制数据,最大10M;
filePath:(String)Local directory of the file provided for applications,本身长度最大10KB,文件大小同上,不超过10M。
先看下微信分享错误的提示:
看到这个错误大家第一个可能会想到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方式分享文件到微信
就在7月初,我看到了微信小程序的官网有了分享至微信朋友圈的功能上线beta板,目前只能在android手机显示分享至朋友圈的按钮,iphone手机暂时不支持,但是android手机分享出来的,iphone手机是可以查看的,不多说,先看一下最终的真机上的展示效果(android和iphone手机)
可将小程序页面分享到朋友圈。适用于内容型页面的分享,不适用于有较多交互的页面分享。
小程序页面默认不可被分享到朋友圈,开发者需主动设置“分享到朋友圈”。页面允许被分享到朋友圈,需满足两个条件:
满足上述两个条件的页面,可被分享到朋友圈。
用户在朋友圈打开分享的小程序页面,并不会真正打开小程序,而是进入一个“小程序单页模式”的页面,“单页模式”有以下特点:
可通过判断 场景值 等于 1154 的方法来进行页面适配。另外,在单页模式下,可设置顶部导航栏与页面的相交状态,具体参考 navigationBarFit 配置。
还需留意的是,在单页模式下, wx.getSystemInfo 接口返回的 safeArea 为整个屏幕空间。
小程序“单页模式”适用于纯内容展示场景,可实现的交互与接口能力有限,因此存在如下限制:
对于一些会产生交互的组件或接口,在点击后调用时,会弹 toast 提示“请前往小程序使用完整服务”。为达到良好的用户体验,请注意适配单页模式的接口能力,请勿大量使用被禁用的接口或组件。
需要了解更多,可以具体看看官方:
1、目前只支持android手机,但iphone手机可以查看
2、有部分的android手机也显示不了“分享至朋友圈”的按钮(因为目前知识beta版)
3、不久之后肯定会发布正式版本,到时候iphone和android手机都可以实现,现在小伙伴可以尝鲜一波。
4、还有一点值得注意的是:不得存在滥用分享违规行为。如强制用户分享行为;分享立即获得利益的诱导行为;以及通过明示或暗示的样式来达到诱导分享目的的行为等。这也是小程序一开始没推出这个功能的一大原因。
10M以下,建议进制算法为*1000以避免1024发生分享错误
将文件变成二进制数组,然后塞进去就OK了,我这边是直接传入的base64码省略了部分步骤
qq分享类似,不过是用intent来的
只能分享本地文件,我这边是js传的,可以将文件存到本地然后分享
File shareFileDir = StorageUtils.getExternalFileDirectory(activity.getApplicationContext(), StaticFinalUtil.SHARE_MEDIA);
File shareFile = new File(shareFileDir, shareMediaNew.title.concat(".").concat(shareMediaNew.fileType));
if (shareFile.exists()) {
Intent qqIntent = new Intent(Intent.ACTION_SEND);
Uri shareFileUri;
if (Build.VERSION.SDK_INT = Build.VERSION_CODES.N) {
//兼容7.0
shareFileUri = FileProvider.getUriForFile(activity.getApplicationContext(), "com.DaTong.InsuranceForAndroid.fileprovider", shareFile);
//添加权限 这一句表示对目标应用临时授权该Uri所代表的文件
qqIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
qqIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}else {
shareFileUri = Uri.fromFile(shareFile);
}
qqIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
qqIntent.setType(getMimeType(shareFile.getPath()));
qqIntent.setClassName("com.tencent.mobileqq", "com.tencent.mobileqq.activity.JumpActivity");
qqIntent.putExtra(Intent.EXTRA_STREAM, shareFileUri);
activity.startActivity(qqIntent);
return;
}