跳转到主要内容
PRODUCT DOCUMENTS

快速找到所需文档,高效完成接入与排障

浏览产品文档与友盟 Skill,展开目录并阅读正文。

SDK方法(微博)

前置检查

  1. 本文介绍微博的分享和登录功能,参见微博分享说明、微博移动端接入文档,微博常见问题文档。

  2. 确保已在微博开放平台创建应用,且审核通过,签名可调用Weibo.getSign()方法查看。

  3. @umeng/share从1.1.5版本支持微博,确保已按照快速开始文档的各步骤安装集成成功。

功能说明

一、判断微博是否安装

  1. 需要先在module.json5增加如下sinaweibo固定配置,

image

  1. 调用微博方法

import { Weibo } from "@umeng/share";

// 须先在应用的module.json5文件中先配置 querySchemes: ["sinaweibo"]
Weibo.isInstalled((data: Record<string, string>) => {
  // obj.isInstalled为true表示已安装 
  console.warn(`微博是否安装: ${JSON.stringify(data)}`);
});

二、分享面板

分享面板组件可在UI页面中按需使用,控制是否展示。

ShareBoard分享面板组件。

visible可选,若配置则分享或取消会自动关闭面板,若配置则根据开发者限制面板的显示状态,不会自动关闭。

confirm必选,点击面板的确认分享回调。“weibo”表示分享到微博平台。

cancel必选,分享面板点击取消的回调。

import { ShareBoard, Weibo, weiboConfig } from "@umeng/share";

ShareBoard({
  visible: this.visible, // 可选,若不传则分享或取消会自动关闭面板,若传则根据开发者限制面板的显示状态,不会自动关闭。
  confirm: (pl: string) => {
    if (pl === 'weibo') { // 分享的应用平台,weibo表示分享到微博 
      // 如下以分享文本到微博为例
      const config: weiboConfig.TextObject  = {
        "text": "友盟分享SDK支持sina微博的登录和分享功能了~",
      };
      Weibo.shareText(config, (obj: object) => {
        console.warn(`文本回调: ${JSON.stringify(obj)}`);
      });
    };
  },
  cancel: () => {
    this.visible = false;
    console.log('取消分享了');
  },
});
    

三、分享文本

分享纯文本到微博,文本限制5000个字符,不可为空。

import { Weibo, weiboConfig } from "@umeng/share";

const config: weiboConfig.TextObject = {
  text: '分享文本到微博~'
};
Weibo.shareText(config, (obj: Record<string, string>) => {
  console.warn(`分享文本的返回: ${JSON.stringify(obj)}`);
});

四、分享图片

分享图片或图文到微博。

注意:图片仅支持uri格式,且每次分享对多限制18张图片。

  1. text可选,文本限制5000个字符以内。

  2. uris必选,图片uri格式的数组集合。支持png/jpg格式,大小不限。

import { Weibo, weiboConfig } from "@umeng/share";
          
const uris: string[] = []; // ["file://com.umeng.hm.share/data/storage/el2/base/haps/entry/files/original-1766137214639.jpg"]
// 或者以从相册选取照片为例,参见文档下方getPictureUriFromAlbum方法调试。
// const uris: string[] = await this.getPictureUriFromAlbum('image');
const config: weiboConfig.ImageObject = {
  text: '分享图片的文本说明~',
  uris: uris,
};
Weibo.shareMultiImage(config, (obj: Record<string, string>) => {
  console.warn(`分享图片的返回: ${JSON.stringify(obj)}`);
});

五、分享视频

分享视频到微博,可设置文本、视频地址、封面图,仅支持uri格式。

  1. text可选,文本限制5000个字符以内。

  2. videoUri必选,视频的uri格式字符串,大小不限。(建议分享视频不超过2G)

  3. coverUri可选,视频的封面图地址,uri格式字符串,大小不限。

import { Weibo, weiboConfig } from "@umeng/share";
          
const uri: string[] = []; // await this.getPictureUriFromAlbum('video');
const config: weiboConfig.VideoObject = {
  text: '分享视频的描述~',
  videoUri: uri[0],
  // coverUri: "file://com.umeng.hm.share/data/storage/el2/base/haps/entry/files/original-1765264648540.jpg",
};
Weibo.shareVideo(config, (obj: Record<string, string>) => {
  console.warn(`分享视频的返回: ${JSON.stringify(obj)}`);
});

六、微博登录

微博登录提供SSO授权、SSO授权(客户端)、SSO授权(WEB)三种登录方式。

微博授权登录让用户使用微博身份登录第三方应用或网站,在微博登录授权后,第三方可以获取到用户的接口调用凭证(access_token、uid),通过 access_token和uid 发起get请求调用(https://api.weibo.com/2/users/show.json?uid=7618106328&appkey=3313904948&access_token=2.00i9nY_IoDoQcD813033983agmGl5B)接口,即可获得用户的微博账号信息。

import { Weibo } from "@umeng/share";

// SSO授权登录
Weibo.authorize((data: Record<string, string>) => {
  console.warn(`SSO授权返回: ${JSON.stringify(data)}`);
});

// SSO授权登录(客户端)
Weibo.authorizeClient((data: Record<string, string>) => {
  console.warn(`SSO授权(客户端)返回: ${JSON.stringify(data)}`);
});

// SSO授权登录(WEB)
Weibo.authorizeWeb((data: Record<string, string>) => {
  console.warn(`SSO授权(WEB)返回: ${JSON.stringify(data)}`);
});

七、其他参考方法

  1. 从手机相册选取照片,返回uris的示例方法,从开发调试时参考。

import common from '@ohos.app.ability.common';
import { fileIo as fs, fileUri } from '@kit.CoreFileKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';

// 选取相册照片示例,返回选中图片uri的数组格式,即uris。
async getPictureUriFromAlbum(type: 'video'|'image'): Promise<string[]> {
  let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
  if (type === 'video') {
    PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.VIDEO_TYPE;
    PhotoSelectOptions.maxSelectNumber = 1;
  } 
  if (type === 'image') {
    PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
    PhotoSelectOptions.maxSelectNumber = 18;
  }
  let photoPicker = new photoAccessHelper.PhotoViewPicker();
  let photoSelectResult: photoAccessHelper.PhotoSelectResult = await photoPicker.select(PhotoSelectOptions);
  let selectPhoto = photoSelectResult.photoUris;
  console.warn(`选中的图片: ${JSON.stringify(selectPhoto)}`);
  // 将选中的图片转uri路径
  const allPath: string[] = selectPhoto.reduce((m: string[], itemPath) => {
    let albumPath = itemPath;
    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路径
    m.push(uri);
    return m;
  }, []);
  console.log(`选中的图片uri地址: ${JSON.stringify(allPath)}`);
  return allPath;
}

  1. 生成签名,用于微博开放平台创建应用时使用。

import { Weibo } from "@umeng/share";

// 生成签名
Weibo.getSign().then(sign => {
  console.warn('get sign:' + sign);
});