taro开发抖音小程序,Button的开发能力uploadDouyinVideo和onUploadDouyinVideo 钩子无法使用怎么处理?

场景:

你想在抖音小程序里面添加拍摄日常内容,并且发布出去,就可以通过uploadDouyinVideo(在button里面)的开放能力的方法使用。

问题:

问题来了,你根据他抖音的开发文档使用,中规中矩运用uploadDouyinVideo,你会发现完全不会触发他对应的onUploadDouyinVideo这个钩子函数。

这上面是原生抖音小程序使用方法,当然原生的抖音小程序肯定能使用这个开放能力啦。

https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/api/open-interface/video-capacity/upload-douyin-video/

重点来了~

我是讲的是taro框架开发的抖音小程序如何使用uploadDouyinVideo

这一步还是原封不动的照抄下来

<Button openType='uploadDouyinVideo' style={{width:'100%',height:'100%',position:'absolute',opacity:'0'}}>点击</Button>

接下来就是onUploadDouyinVideo,因为我是把他放到全局ts文件上,global.ts,专门存放多次复用的功能。

export async function onUploadDouyinVideo(uploadOptions) {
    console.log(uploadOptions);
    const videoPath = await chooseVideo();
    console.log("videoPath:", videoPath);
    // 返回值(文档中称之为 uploadParams)将被当作发布参数传入视频发布器,发布视频
    return {
      videoPath,
      stickersConfig: {
        text: [
          {
            text: "",
            color: "",
            fontSize: 28,
            scale: 1,
            x: 0.5,
            y: 0.5,
          },
        ],
      },
      success: function (callback) {
        // 只有当发布成功且挂载成功时,success callback 才会有 videoId
        console.log("success: ", callback);
      },
      fail: function (callback) {
        console.log("fail: ", callback);
      },
      complete: function (callback) {
        console.log("complete: ", callback);
      },
    };
}

function chooseVideo() {
    return new Promise((resolve) => {
      Taro.chooseVideo({
        sourceType: ["album", "camera"],
        compressed: true,
        success: (res) => {
          resolve(res.tempFilePath);
        },
        fail: (err) => {
          let errType = err.errMsg.includes("chooseVideo:fail cancel")
            ? "取消选择"
            : "选择失败";
           
          resolve("");
        },
      });
    });
  }

解释一下 Taro.chooseVideo,是调用他摄像头权限使用。

最后一步,那就是在当前页实例上进行手动添加该钩子函数

import Taro, { getCurrentInstance } from "@tarojs/taro";
import { onUploadDouyinVideo } from '@/utils/global'
class GestatePage extends Component<IProps, IState> {
  $instance = getCurrentInstance();
  constructor(props) {
    super(props);
    const params = this.$instance.router.params;
    this.state = {
     
    }
  }
  onReady(){
    console.log('onReadyonReadyonReady: ',this.$instance)
    this.$instance.page.onUploadDouyinVideo = onUploadDouyinVideo
 }
 
  //#endregion
  
  render() {
   <Button openType='uploadDouyinVideo' style={{width:'100%',height:'100%',position:'absolute',opacity:'0'}}>点击</Button>
 }

export default GestatePage;

然后点击该按钮就能直接调用摄像头进行拍摄日常并且发布。

当然,有人会疑惑为啥不直接点击右上角那个胶囊按钮,然后直接进行拍抖音不更好吗?

其实那样也行的。我们只是想把这个拍摄的入口展示在小程序上而已,紧接着肯定会有人问

不用tt.onShareAppMessage()这个api呢,因为他老是提示不是特殊用户无法自主挂载小程序,所以就跟变扭,用了uploadDouyinVideo。

好了,到这就完了,拜拜!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Taro 开发小程序,需要首先安装 Taro 的命令行工具。具体可以参考 Taro 官方文档:https://taro-docs.jd.com/taro/docs/GETTING-STARTED。 接下来,可以使用 Taro 提供的组件来实现地图和导航功能。需要注意的是,由于小程序的限制,需要在小程序后台申请地图和导航的 API key,并将其配置在 Taro 的配置文件中。 以下是一个简单的示例代码,实现了在地图上显示两个点之间的路线,并提供导航功能: ```jsx import Taro, { Component } from '@tarojs/taro' import { Map, Polyline } from '@tarojs/components' import QQMapWX from '@/utils/qqmap-wx-jssdk' const qqmapsdk = new QQMapWX({ key: 'your_api_key' }) class MapPage extends Component { state = { polyline: [] } componentDidMount() { this.getRoute() } getRoute = () => { const { startLat, startLng, endLat, endLng } = this.$router.params qqmapsdk.direction({ mode: 'driving', from: { latitude: startLat, longitude: startLng }, to: { latitude: endLat, longitude: endLng }, success: res => { const points = res.result.routes[0].polyline.map(item => ({ latitude: item.latitude, longitude: item.longitude })) this.setState({ polyline: [{ points }] }) } }) } handleNavigate = () => { const { startLat, startLng, endLat, endLng } = this.$router.params Taro.openLocation({ latitude: Number(endLat), longitude: Number(endLng), name: '目的地' }) } render() { const { startLat, startLng, endLat, endLng } = this.$router.params const { polyline } = this.state return ( <Map id="map" latitude={Number(endLat)} longitude={Number(endLng)} scale="14" style={{ width: '100%', height: 'calc(100vh - 80px)' }} > <Polyline points={polyline[0] && polyline[0].points} strokeColor="#0099FF" strokeWidth="4" zIndex="1" /> <Button onClick={this.handleNavigate}>导航</Button> </Map> ) } } export default MapPage ``` 在这个示例中,我们使用了腾讯地图提供的 `direction` API 获取两个点之间的路线,并将其在地图上显示出来。同时,我们还提供了一个导航按钮,点击后可以跳转到小程序自带的导航页面,实现导航功能。 需要注意的是,在 `direction` API 中,我们使用了 `mode: 'driving'` 来指定导航模式为驾车模式。如果需要其他模式,可以将其改为 `'walking'` 或 `'transit'` 等。另外,我们还需要将地图的 `latitude` 和 `longitude` 设置为目的地的坐标,以便地图显示正确的位置。 希望这个示例对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值