用其他应用打开

WARNING

请注意,当前域名 https://dev.weixin.qq.com/docs/framework 文档已不维护,请前往微信文档中心open in new window 找到对应的新文档继续使用

  • 如开发者想实现在「其他应用打开」的列表中出现自家开发的App,可参考下方操作实现
  • 注意:开发者工具版本需为最新的 nightly,即版本 >= 1.06.2407252
  • 以及 Android SDK >= 1.3.26;iOS SDK >= 1.3.36

操作步骤

1、打开微信开发者工具,前往projuect.miniapp.json 且切换为 json 模式

2、Android 应用:在 mini-android 中新增下面的配置


"mini-android": {
    "sdkVersion": "1.3.20",
    "openMimeTyeps":[
      "application/pdf",//要打开的文件类型
      "image/*",//要打开的文件类型
      "可按需添加更多"
    ],
  }

iOS 应用:然后在 mini-ios 中新增下面的配置


"openMimeTyeps": [
      {
        "CFBundleTypeName": "AnyName",
        "LSHandlerRank": "Default",
        "LSItemContentTypes": [
          "public.image"
        ],
        "CFBundleTypeRole": "Viewer"
      }
    ],

字段说明:

  • CFBundleTypeName 必填,openMimeTypes是数组类型,给这个文件支持的数组每一项起一个别名
  • CFBundleTypeRole 必填,身份,用来标识自己 app 可对这些文件处理的身份, Editor、Viewer、Shell、None
  • LSHandlerRank 必填,用来决定 app 在文件分享可选的 app 列表中的顺序,声明应用程序优先级 Owner、Default、Alternate、None
  • LSItemContentTypes 必填,支持的文件类型 UTI(苹果自己定义的文件类型)
  • 更多文档请查阅苹果官方:https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/TP40009249-SW1

3、使用wx.miniapp.registOpenURL 监听到通过文件打开 app 的事件

  wx.miniapp.registOpenURL((param) => {
    console.log('regsitOpenUrl', param)
    // 通过 isFile 来标识是否为文件,此时的 param.data.url 为文件在手机文件系统中的绝对路径
    if (param.data.isFile) {
        // do something
    }
})

4、使用wx.miniapp.copyNativeFileToWx 将系统中的文件复制进 wx 文件沙箱中;传入参数 nativeFilePath 即文件在手机文件系统中的绝对路径,成功后会返回 tempFilePath

wx.miniapp.copyNativeFileToWx({
        nativeFilePath: param.data.url,
        success(res) {
          console.log('copyNativeFileToWx success', res)
        },
        fail(e) {
          console.log('copyNativeFileToWx fail', e)
        }
      })

结合上述步骤,完整示例如下:

wx.miniapp.registOpenURL((param) => {
    console.log('regsitOpenUrl', param)
    if (param.data.isFile) {
      wx.miniapp.copyNativeFileToWx({
        nativeFilePath: param.data.url,
        success(res) {
          console.log('copyNativeFileToWx success', res)
        },
        fail(e) {
          console.log('copyNativeFileToWx fail', e)
        }
      })
    }
})