UniApp 实现分享功能

文章目录

  • 一、环境准备
  • 二、代码实现
  • 三、常见问题解决

一、环境准备

1. 必要的权限配置
manifest 中添加以下权限:

{
  "app-plus": {
    "distribute": {
      "android": {
        "permissions": [
          "\"android.permission.INTERNET\"/>",
          "\"android.permission.ACCESS_NETWORK_STATE\"/>",
          "\"android.permission.ACCESS_WIFI_STATE\"/>",
          "\"android.permission.READ_PHONE_STATE\"/>",
          "\"android.permission.WRITE_EXTERNAL_STORAGE\"/>"
        ]
      }
    }
  }
}

2.各平台配置
微信配置

  • 前往微信开放平台注册应用
  • manifest.json 中添加:
"app-plus": {
  "distribute": {
    "sdkConfigs": {
      "share": {
        "weixin": {
          "appid": "你的微信APPID",
          "UniversalLinks": "https://你的域名/app/"
        }
      }
    }
  }
}

QQ配置

  • 前往QQ互联平台注册应用
  • manifest.json 中添加:
"qq": {
  "appid": "你的QQ APPID"
}

二、代码实现

<template>
  <view>
    <button @click="share('weixin','WXSceneSession)">微信好友</button>
    <button @click="share('qq','')">QQ好友</button>
    <button @click="share('weixin','WXSceneTimeline')">朋友圈</button>
  </view>
</template>

<script>
export default {
  methods: {
    async share(provider, scene) {
      if (!await this.checkInstall(provider)) return;
      
      try {
        await uni.share({
          provider,
          type: 0, // 0-图文,1-纯文字,2-图片,5-小程序
          title: "优质内容分享",
          summary: "点击查看详情内容",
          href: "https://example.com",
          imageUrl: "/static/share.jpg",
          scene,
        });
      } catch (e) {
        this.handleError(e);
      }
    },
    
    async checkInstall(provider) {
      const installed = await checkAppInstalled(provider);
      if (!installed) {
        uni.showModal({
          title: '提示',
          content: `请先安装${provider === 'weixin' ? '微信' : 'QQ'}`,
          showCancel: false
        });
        return false;
      }
      return true;
    },

	checkAppInstalled(provider) {
      return new Promise((resolve) => {
      	uni.getProvider({
      		service: 'share',
      		success: (res) => {
        		resolve(res.provider.includes(provider));
      		}
    	});
  	  });
    },
    
    handleError(error) {
      console.error('分享失败:', error);
      const msg = {
        '-1': '分享已取消',
        '2': '未安装应用',
        '3': '参数错误'
      }[error.errCode] || '分享失败';
      
      uni.showToast({
        title: msg,
        icon: 'none'
      });
    }
  }
}
</script>

三、常见问题解决

1.iOS 分享图片不显示

  • 确保图片小于32KB
  • 使用网络图片地址(本地路径需转base64)

2. Android 签名不一致

  • 检查开放平台配置的签名与打包签名是否一致
  • 使用官方提供签名校验工具

你可能感兴趣的:(uni-app,vue.js,前端,javascript)