SDK方法(微信)
前置检查
功能说明
一、判断是否安装微信
需要先在module.json5增加如下固定配置

调用微信安装的方法
import { WX } from "@umeng/share";
WX.isInstalled((obj: object) => {
// obj.isInstalled为true表示微信已安装
console.warn(`安装微信回调: ${JSON.stringify(obj)}`);
});二、分享面板
分享面板组件可在UI页面中按需使用,控制是否展示。
ShareBoard分享面板组件。
visible可选,若配置则分享或取消会自动关闭面板,若配置则根据开发者限制面板的显示状态,不会自动关闭。
confirm必选,表示点击面板的类型如微信图标后的回调,wxsession表示分享到微信平台,用户可在确认分享的回调中调用分享的方法。
cancel必须,分享面板点击取消的回调。
import { WX, ShareBoard, wxConfig } from "@umeng/share";
ShareBoard({
visible: this.visible, // 可选,若不传则分享或取消会自动关闭面板,若传则根据开发者限制面板的显示状态,不会自动关闭。
confirm: (pl: string) => {
// pf表示分享的应用平台
if (pl === 'wxsession') { // wxsession 分享到微信好友会话
const config: wxConfig.TextObject = {
"scene": 'wxsession',
"text": "分享文本文本文本~",
};
WX.shareText(config, (obj: object) => {
console.warn(`文本回调: ${JSON.stringify(obj)}`);
});
};
if (pl === 'wxtimeline') { // wxtimeline 分享到微信朋友圈
const config: wxConfig.TextObject = {
"scene": 'wxtimeline',
"text": "分享文本到微信朋友圈~",
};
WX.shareText(config, (obj: object) => {
console.warn(`文本回调: ${JSON.stringify(obj)}`);
});
};
},
cancel: () => {
this.visible = false;
console.log('取消分享了');
},
});
三、分享文本
分享文本到微信,文本限制大于 0 且不超过 10K,不可都是空。
scene表示分享到微信的类型,wxtimeline是分享到朋友圈,wxsession是分享到好友会话,默认好友会话。
import { WX, wxConfig } from "@umeng/share";
// 分享文本到微信会话或朋友圈
const config: wxConfig.TextObject = {
"scene": 'wxtimeline',
"text": "分享文本文本文本~",
};
WX.shareText(config, (obj: object) => {
console.warn(`文本回调: ${JSON.stringify(obj)}`);
});四、分享图片
分享图片到微信
注意:缩略图imageUri和imageData为二选一,如果都配置了则仅会生效imageUri。
scene表示分享到微信的类型,wxtimeline是分享到朋友圈,wxsession是分享到好友会话,默认好友会话。imageUri可选,图片本地路径的uri。支持jpeg/png类型的图片,图片限制25M。imageData可选,图片二进制数据的base64字符串,限制64KB以内。callbackAbility可选,表示分享后返回应用打开的ability名称,开发者应用内配置可能会影响实际生效。
import { WX, wxConfig } from "@umeng/share"; // 引用share sdk
// 调用sdk分享
const config: wxConfig.ImageObject = {
"scene": 'wxtimeline', // 分享到会话或朋友圈
"imageUri": uri,
// "imageData": imgData,
"callbackAbility": "EntryAbility"
};
WX.shareImage(config, (obj: object) => {
console.warn(`图片回调: ${JSON.stringify(obj)}`);
});获取uri分享
uri分享手机相册照片分享和本地路径图片方式,限制图片25M。
分享手机相册图片的uri代码示例如下:
import common from '@ohos.app.ability.common';
import { fileIo as fs, fileUri } from '@kit.CoreFileKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
// 选取相册照片示例,得到返回的uri调用分享图片方法
async getPictureUriFromAlbum(type: 'video'|'image'): Promise<string[]> {
let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
if (type === 'video') {
PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.VIDEO_TYPE;
PhotoSelectOptions.maxSelectNumber = 1;
} else {
PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
PhotoSelectOptions.maxSelectNumber = 1;
}
let photoPicker = new photoAccessHelper.PhotoViewPicker();
let photoSelectResult: photoAccessHelper.PhotoSelectResult = await photoPicker.select(PhotoSelectOptions);
let selectPhoto = photoSelectResult.photoUris;
console.warn(`选中的图片: ${JSON.stringify(selectPhoto)}`);
// 将选中的图片转uri路径
let albumPath = selectPhoto[0];
let context = getContext(this) as common.UIAbilityContext;
let filePath = `${context.filesDir}/original-${Date.now()}.${type === 'video' ? 'mp4' : 'jpg'}`;
let file: fs.File | undefined;
file = fs.openSync(albumPath, fs.OpenMode.READ_ONLY);
fs.copyFileSync(file.fd, filePath);
fs.closeSync(file);
let uri: string = fileUri.getUriFromPath(filePath); // uri路径
return uri;
};分享本地路径沙箱图片uri示例如下:
import { fileIo as fs, fileUri } from '@kit.CoreFileKit';
// 可选,相册照片分享示例,获取uri后调用sdk方法。
const uri = await this.getPictureUriFromAlbum('image');
console.warn('uri', uri);获取imageData分享
imageData可以是本地路径图片,也可以是网络链接图片,只要将图片转为ArrayBuffer的base64字符串格式即可,限制64KB。
示例代码如下:
import { image } from '@kit.ImageKit';
import buffer from '@ohos.buffer';
// 可选,使用imageData分享图片示例,获取imgData后调用sdk方法分享图片。
// const resourceManager = getContext(this).resourceManager;
// const imageArray = await resourceManager.getMediaContent($r('app.media.app_icon'));
// const data1: ArrayBuffer = imageArray.buffer as ArrayBuffer;
// const imageResource = image.createImageSource(data1);
// const imagePixelMap: image.PixelMap = imageResource.createPixelMapSync();
// const imagePackerApi: image.ImagePacker = image.createImagePacker(); // 创建ImagePacker实例,用于图片压缩和编码。
// const data: ArrayBuffer = await imagePackerApi.packing(imagePixelMap, { format: 'image/jpeg', quality: 100 });
// const buf: buffer.Buffer = buffer.from(data); // data是压缩的图,也可用data1原始图
// const imgData: string = buf.toString('base64', 0, buf.length);
// // console.warn(`imgData: ${imgData}`);五、分享网页链接
分享网页链接到微信:
注意:缩略图imageUrl和imageData为二选一,如果都配置了则仅会生效imageUrl。缩略图限制64KB内,超出大小会忽略缩略图的展示。
scene可选,表示分享到微信的类型,wxtimeline是分享到朋友圈,wxsession是分享到好友会话,默认好友会话。webpageUrl必填,网页链接地址。title必填,网页链接名称。description可选,网页摘要说明。imageUrl可选,网页缩略图(网络图片链接地址),64KB以内。imageData可选,网页缩略图(图片二进制数据),64KB以内。callbackAbility可选,表示分享后返回应用打开的ability名称,开发者应用内配置可能会影响生效。
import { WX, wxConfig } from "@umeng/share";
// 可选,获取imageData示例,注意imageData是ArrayBuffer类型,而不是二进制字符串格式
// const resourceManager = getContext(this).resourceManager;
// const imageArray = await resourceManager.getMediaContent($r('app.media.app_icon'));
// const imgData: ArrayBuffer = imageArray.buffer as ArrayBuffer;
// 调用分享
const config: wxConfig.WebPageObject = {
"scene": 'wxtimeline', // 分享到会话或朋友圈
"webpageUrl": "https://www.umeng.com/",
"title": "测试qq网页链接",
"description": "测试qq网页摘要",
// "imageUrl": "https://img.alicdn.com/imgextra/i2/O1CN01OQQ7ec1MNmf3xFWAX_!!6000000001423-2-tps-96-96.png",
"imageData": imgData,
"callbackAbility": "EntryAbility"
};
WX.shareWebPage(config, (obj: object) => {
console.warn(`网页回调: ${JSON.stringify(obj)}`);
});六、分享小程序
分享小程序到微信:
注意:缩略图imageUrl和imageData为二选一,如果都配置了则仅会生效imageUrl。缩略图限制64KB内,超出大小会忽略缩略图的展示。
userName必填,小程序的原始 id (gh_xxxx形式的id)path必填,小程序的 path。title必填,小程序的标题名称。description可选,小程序描述。miniprogramType可选,小程序的类型,默认正式版0, 测试版1, 预览版2。withShareTicket可选,是否使用带shareTicket的分享。可以设置 withShareTicket 为 true,当分享卡片在群聊中被其他用户打开时,可以获取到 shareTicket,用于获取更多分享信息。imageUrl可选,小程序缩略图(网络图片链接地址),64KB以内。imageData可选,小程序缩略图(图片二进制数据),64KB以内。callbackAbility可选,表示分享后返回应用打开的ability名称,开发者应用内配置可能会影响生效。
import { WX, wxConfig } from "@umeng/share";
// 可选,获取imageData示例,注意imageData是ArrayBuffer类型,而不是二进制字符串格式
// const resourceManager = getContext(this).resourceManager;
// const imageArray = await resourceManager.getMediaContent($r('app.media.app_icon'));
// const imgData: ArrayBuffer = imageArray.buffer as ArrayBuffer;
// 调用分享
const config: wxConfig.MiniProgramObject = {
"userName": 'gh_ddab9f37054f',
"path": 'udopkg/home/home',
"miniprogramType": 0,
"title": "友小萌小程序Title",
"description": "友小萌小程序描述信息",
// "imageUrl": "https://img.alicdn.com/imgextra/i2/O1CN01OQQ7ec1MNmf3xFWAX_!!6000000001423-2-tps-96-96.png",
"imageData": imgData,
"callbackAbility": "EntryAbility2"
};
WX.shareMiniProgram(config, (obj: object) => {
console.warn(`小程序回调: ${JSON.stringify(obj)}`);
});七、分享视频
分享视频到微信:
注意:缩略图imageUrl和imageData为二选一,如果都配置了则仅会生效imageUrl。缩略图限制64KB内,超出大小会忽略缩略图的展示,推荐使用png/jpg格式图片。
scene可选,表示分享到微信的类型,wxtimeline是分享到朋友圈,wxsession是分享到好友会话,默认好友会话。分享到好友会话时:
videoUrl必填,视频链接地址,限制长度不超过 10KB。videoLowBandUrl可选,视频链接地址。供低带宽的环境下使用的视频链接,限制长度不超过 10KB。title可选,标题。description可选,描述。imageUrl可选,视频封面图(网络图片链接地址),64KB以内。imageData可选,视频封面图(图片二进制数据),64KB以内。callbackAbility可选,表示分享后返回应用打开的ability名称,开发者应用内配置可能会影响生效。
分享到朋友圈时:
videoUri必填,视频 uri 格式地址。imageUrl可选,视频封面图(网络图片链接地址),64KB以内。imageData可选,视频封面图(图片二进制数据),64KB以内。
import { WX, wxConfig } from "@umeng/share";
// 调用分享
// 可选,相册照片分享示例,获取uri后调用sdk方法。
const uri = await this.getPictureUriFromAlbum('video');
console.warn('uri', uris);
const config: wxConfig.VideoObject = {
"scene": 'wxtimeline', // 分享到会话或朋友圈
"videoUri": uri,
// "videoUrl": "https://video.umeng.com/college/%E5%AD%A6%E9%99%A2%E5%AE%A3%E4%BC%A0%E7%89%87.mp4",
// "videoLowBandUrl": "https://video.umeng.com/college/%E5%AD%A6%E9%99%A2%E5%AE%A3%E4%BC%A0%E7%89%87.mp4",
// "title": "标题xxx",
// "description": "描述xxx",
// "imageUrl": "https://img.alicdn.com/imgextra/i2/O1CN01OQQ7ec1MNmf3xFWAX_!!6000000001423-2-tps-96-96.png",
// "imageData": imgData,
// "callbackAbility": "EntryAbility"
};
WX.shareVideo(config, (obj: object) => {
console.warn(`视频回调: ${JSON.stringify(obj)}`);
});八、调用微信登录
微信授权登录让微信用户使用微信身份登录第三方应用或网站,在微信用户授权登录已接入微信的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过 access_token 可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等。
目前移动应用上微信登录只提供原生的登录方式,需要用户安装微信客户端才能配合使用。
友盟sdk微信登录方法仅在获取到access_token后即返回到开发者,再由开发者通过access_token调用获取用户信息的/sns/userinfo接口取值。
参见微信登录功能文档,登录方法返回其中第二步的值即结束。
import { WX } from "@umeng/share";
WX.login((obj: object) => {
// 返回access_token和openid等信息,用于开发者调取微信api获取微信个人信息
console.warn(`开发者调用登录回调: ${JSON.stringify(obj)}`);
});