更新记录

2.8.0(2023-07-17)

  1. 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 - 12.0 armeabi-v7a:支持,arm64-v8a:支持,x86:支持 适用版本区间:11 - 16

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

andorid:需要android.permission.READ_EXTERNAL_STORAGE、android.permission.WRITE_EXTERNAL_STORAGE

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问