更新记录
2.8.0(2023-07-17)
- ios 修改分享扩展默认只支持到ios16.4,适配为支持ios11.0及以上
2.7.0(2023-07-06)
本次主要更新: 1.修改andorid10以下,文件存储路径
2.6.0(2023-07-03)
本次主要更新: 1.ios 增加代码控制 是否显示分享扩展的发布UI,之前的KJIsShowUI将无效,更新版本的时候请注意 2.ios 修复 NSExtensionActivationSupportsText 不是boole的问题,默认为true
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 14.0 | armeabi-v7a:支持,arm64-v8a:支持,x86:支持 | 适用版本区间:11 - 17 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
KJ-Document
添加到“用其他应用打开”和分享列表中、获取分享的文件、支持多张图片分享(ios、android)
注意事项
andorid版本注意事项:
1.当manifest.json->app常用其它设置-> targetSdkVersion >= 30(andorid11),如果不使用KJ-ManageExternalStorage这个插件请求“所有文件访问权限”,当分享过来的路径(uri)前缀是file://(就不能访问)
比如:钉钉app的“其他应用打开”,qq、微信没有问题,因为分享的文件是content://
2.Google Play上架需要注意:添加“所有文件访问权限”,就是“android.permission.MANAGE_EXTERNAL_STORAGE”,
国内使用没有什么影响,但是在Google Play上需要说明为什么已有的SAF或MediaStore不满足你的应用需求,审核通过才允许上架使用。
谷歌市场只允许文件管理app可以申请这个权限。
3.还要添加 android.permission.READ_EXTERNAL_STORAGE、android.permission.WRITE_EXTERNAL_STORAGE,访问存储卡内容,要不也不能读取app外部存储的内容
KJ-ManageExternalStorage插件:https://ext.dcloud.net.cn/plugin?id=10966
关于 上传到appstore,错误说明
1. ITMS-90361: Invalid info.plist value type
解决:ios-extension.json -》NSExtensionActivationSupportsText 设置为true,boolean类型
2.ITMS-907307:Missing Document Configuration
目前这个只是警告,不影响提交,可不解决
解决:manifest.json -》 ios -》 下配置 LSSupportsOpeningDocumentsInPlace
/* ios打包配置 */
"ios" : {
"capabilities" : {
"plists": {
"LSSupportsOpeningDocumentsInPlace": false,
"KJGroupIdentifier" : "group.com.kj.KJDocument.share"
},
"entitlements": {
"com.apple.security.application-groups": ["group.com.kj.KJDocument.share"]
}
},
}
ios 分享扩展 更多教程:https://docs.qq.com/doc/DWllBS01aWHpvWUNB
如果需要添加分享扩展
需要在 主目录->nativeplugins->KJ-Document 下配置添加ios-extension.json和ios-share.mobileprovision文件
ios-extension.json文件配置参考 示列项目
比如主工程Bundle ID为:com.xxxx.xxxx
分享扩展的Bundle ID 和 App Groups Bundle ID 需要开苹果开发者官网配置
{
"share.appex": {
"identifier": "com.xxxx.xxxx.share",//分享扩展的Bundle ID
"profile": "ios-xxxx.mobileprovision",//文件名字必须以ios-开头
"plists": {
"KJGroupIdentifier":"group.com.xxxx.xxxx.share",//App Groups Bundle ID
"NSExtension":{
"NSExtensionAttributes":{
"NSExtensionActivationRule":{
"NSExtensionActivationSupportsAttachmentsWithMaxCount":9,//附件最多限制,为数值类型。附件包括File、Image和Movie三大类,单一、混选总量不超过指定数量
"NSExtensionActivationSupportsAttachmentsWithMinCount":1,//附件最少限制,为数值类型。当设置NSExtensionActivationSupportsAttachmentsWithMaxCount时生效,默认至少选择1个附件,分享菜单中才显示扩展插件图标。
"NSExtensionActivationSupportsFileWithMaxCount":9,//文件最多限制,为数值类型。文件泛指除Image/Movie之外的附件,例如【邮件】附件、【语音备忘录】等。单一、混选均不超过指定数量。
"NSExtensionActivationSupportsImageWithMaxCount":9,//图片最多限制,为数值类型。单一、混选均不超过指定数量。
"NSExtensionActivationSupportsMovieWithMaxCount":9,//视频最多限制,为数值类型。单一、混选均不超过指定数量。
"NSExtensionActivationSupportsText":true,//是否支持文本类型,布尔类型0和1,默认不支持。如【备忘录】的分享
"NSExtensionActivationSupportsWebURLWithMaxCount":1,//Web链接最多限制,为数值类型。默认不支持分享超链接,需要自己设置一个数值。
"NSExtensionActivationSupportsWebPageWithMaxCount":1//Web页面最多限制,为数值类型。默认不支持Web页面分享,需要自己设置一个数值。
}
}
}
},
"entitlements": {
"com.apple.security.application-groups":["group.com.xxxx.xxxx.share"] //App Groups Bundle ID,要跟主工程Bundle ID配置的App Groups一致
}
}
}
导入插件
const KJDocument = uni.requireNativePlugin('KJ-Document');
使用
<template>
<view>
<button type="primary" @click="open()">监听文件</button>
<button type="primary" @click="setting_ios(false)">不显示分享扩展的发布UI(ios)</button>
<button type="primary" @click="setting_ios(true)">显示分享扩展的发布UI(ios)</button>
<view class="json">{{json}}</view>
<image :src="path"></image>
</view>
</template>
<script>
const KJDocument = uni.requireNativePlugin('KJ-Document');
export default {
data() {
return {
json: '',
path: ''
}
},
onLoad() {
this.open()
},
onShow() {
this.open()
},
methods: {
open() {
/**
* ios:注意 “用其他应用打开” 在app完全关闭的情况下,从“文件”app里分享的文件,打开app,获取的文件地址没有访问权限,
* app在后台的话,就没有问题,可以提示用户再选择一次。在微信,QQ等,打开就没有问题
* ios分享没有问题
*
* andorid:配置了 一个文件 和 多个文件 分享
* */
KJDocument.openURL((res) => {
//ios:res返回[{"path":""}], 因为系统api原因,“用其他应用打开”只返回一个文件,分享可以返回多个文件
//android: res返回[{"path":""}] 可以返回多个文件
console.log("openURL: " + JSON.stringify(res));
this.json = JSON.stringify(res)
uni.showModal({
title: "监听到分享的数据",
content: this.json
})
if (uni.getSystemInfoSync().platform == 'ios') {
/**
* 返回的json说明:[{"path":"/var/mobile/Containers/Data/Application/B12C17BB-0A20-4205-BAE1-4CC6110381C0/Documents/Pandora/apps/__UNI__89F76C9/doc/KJ-DocumentV2/IMG_3202.PNG",
* "type":"file","textViewContent":""}]
* type - file-文件 url-网址 text-文本 other-其它(这个属于不支持该类型,只会返回一个字符串) error-错误
* path - type==file则是文件的绝对路径,其它则是文本
* textViewContent - 分享扩展的发布UI填写的文本
* */
for (var i = 0; i < res.length; i++) {
var dic = res[i];
if (dic.type == "file") {
this.path = dic.path
}
}
} else {
/**
* 返回的json说明: [{"uri":"content://com.miui.gallery.open/raw//storage/emulated/0/Android/data/com.miui.gallery/cache/SecurityShare/1688092107366.jpeg",
* "type":"image/*","path":"/storage/emulated/0/Android/data/uni.UNI89F76C9/cache/1688092107610/1688092107366.jpeg"}]
* type - 文件的MIME Type,资源的媒体类型,type如果为空,则是文本
* path - type如果为空,则是文本,否则是文件的绝对路径
* */
for (var i = 0; i < res.length; i++) {
var dic = res[i];
this.path = dic.path //注意:“用其他应用打开”,有时候文件名不是分享过来的文件名,比如微信,有时候分享过来的不是文件名,而是一段中文加数字的文字
}
}
uni.getFileInfo({
filePath: this.path,
success: (res) => {
console.log("getFileInfo:" + JSON.stringify(res));
},
fail: (res) => {
console.log("fail:" + JSON.stringify(res));
}
})
});
},
setting_ios(is) {
var dic = {
"isShowUI": is //默认是true
}
console.log(JSON.stringify(dic))
KJDocument.setting_ios(dic, (res) => {
console.log("setting_ios:" + JSON.stringify(res));
});
}
}
}
</script>
<style>
.json {
word-wrap: break-word;
}
</style>