前言

随着鸿蒙生态蓬勃发展,各种实用的鸿蒙三方库已成为开发者高效开发的利器。它不仅能拓展应用功能边界,还能大幅提升开发效率,不管你是刚接触鸿蒙开发的小白,还是开发时长两年半的老司机,掌握这些三方库,绝对能让你在鸿蒙开发上更加方便!博主在日常的工作开发中也也是如此,今天给大家分享的是qqcommonlibhar三方库。

qqcommonLibHar(harmony-utils (API12 - 5.0.3.906)

HarmonyOS 5.0.3 Beta2 SDK,原样包含OpenHarmony SDK Ohos_sdk_public 5.0.3.131 (API Version 15 Beta2)

🏆简介

qqcommonLibHar是qq二次封装,分享,授权登录

🌞下载安装

ohpm install @zyl/qqcommonlibhar

🙏使用说明

qqSdk-鸿蒙接入二次封装-har-扫码登录、授权登录,分享

目前QQ HarmonyOS SDK v1.0.2版本已经发布,各位应用开发者可参考接入文档说明提前熟悉接入流程;
*当前包含能力:扫码登录、授权登录,其他功能正在持续迭代中,敬请期待后续版本。

首先要申请QQ的 appId
注册开发者

使用App Linking实现应用间跳转

1.添加依赖、module.json5 配置

前期准备

(1)运行

ohpm i @tencent/qq-open-sdk // 大于1.0.3
ohpm install @zyl/qqcommonlibhar

在工程级 oh-package.json5 文件中可看到新增依赖库

(2)module.json5 配置文件修改

// module.json5 的"module"节点下配置 querySchemes
"querySchemes": [
    "https",
    "qqopenapi"
]  

// 在 Ability 的 skills 节点中配置scheme
"skills": [
 {
    "entities": [
      "entity.system.browser"
    ],
    "actions": [
      "ohos.want.action.viewData"
    ],
    "uris": [
      {
        "scheme": "qqopenapi", // 接收 QQ 回调数据
        "host": "xxxxxxxxx", // 业务申请的互联 appId,如果填错会导致 QQ 无法回调
        "pathRegex": "\\b(auth|share)\\b",
        "linkFeature": "Login",
      }
    ]
  }
]

2.*授权登录接入*

(1)调用 IQQOpenApi.handleAuthResult()处理回调数据

// 在业务 Ability.onNewWant() 中调用(注意 IQQOpenApi 实例需要与调用 login 方法为同一实例,同时需要与 module.json5 中配置 scheme 为同一个 Ability)
  onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    super.onNewWant(want, launchParam);
    let appid = 000000000   // 最好文件工程化引入,这儿简写
    QQOpenApiHolder.getInstance(appid)?.handleResult(want)
    // 使用QQOpenApiHolder来自于hmrouter-----注意注意
  }  

(2) 简单使用

checkQQApp 判断是否安装qq

QQIsInstall(APP_ID_QQ)

QQLoginWithCallback ,登录获取用户信息

QQLoginWithCallback传入appId,APP_KEY,reqOptions: AuthReqOptions,()=>{}返回promise

  • @param appId
  • @param APP_KEY
  • @param {} as AuthReqOptions
  • @param(可传) ()=>{} firstInterface第一个接口qqlogin完成,// 第一个接口login处理完回到自己的app,便于给loading
    ```
        const APP_ID_QQ = 000000000
        const APP_KEY_QQ = "exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
           // 最好文件工程化引入,这儿简写
        if(QQIsInstall(APP_ID_QQ)){
          QQLoginWithCallback(APP_ID_QQ,APP_KEY_QQ,{
            scope: "all",
            useQrCode: false,
            networkTimeout: 5000,
            forceWebLogin: false
          } as AuthReqOptions,
        () => {
          // 第一个接口login处理完回到自己的app,便于给loading
          this.showLoading = true
        })
            .then((res:QQLoginResult)=>{
              if(res.code===200){
                //成功,拿到数据
                const json: UserInfoJson = JSON.parse(res.data as string)
                  //登录成功调用用户数据的接口
                  AppStorage.setOrCreate('QQLogin', json)
              }else if (res.code===499){
                // 用户取消
              }else if (res.code===400){
                // 登录失败
              }
            })
            .catch((error:QQLoginResult|Error)=>{
              console.log('error',JSON.stringify(error))
            })
        }else {
          console.log('未安装QQ,打开异常')
        }
    


###  QQOpenApiHolder 原生使用
```c
  import { QQOpenApiHolder } from "@zyl/qqcommonlibhar"
    // 如判断是否安装原生使用
    const qqOpenApi: IQQOpenApi = QQOpenApiHolder.getInstance(APP_ID_QQ)
    qqOpenApi.isQQInstalled()

QQShare分享

QQShare

  • @param appId: number,
  • @param appKey: string,
  • @param sharJson: string, // 分享的数据
  • @param shareType?:number, // 分享类型,默认是2 .目前只支持图文ark类型 2
  • @param openId?: string, 没啥用的

目前只支持图片文字 类型为2

           Button('QQShare').onClick(async () => {
            QQShare(APP_ID_QQ,APP_KEY_QQ,'{"msg_style": 0, "title":"鸿蒙ARK图文", "summary":"ARK分享的内容", "brief":"互联分享", "url":"https://www.qq.com", "picture_url":"https://tangram-1251316161.file.myqcloud.com/files/20200722/796170665c821b9a1982918094aa6ba7.png"}',
            ).then((result:ShareResult)=>{
              console.log('QQShareresult',result)
              switch (result.resultType) {
                case 1: {
                  AlertDialog.show({
                    message:'分享成功'
                  })
                }
                  break
                case 2: {
                  let msg: string = result.message ?? "用户取消分享"
                  AlertDialog.show({
                    message:msg
                  })
                }
                  break
                case 3: {
                  let msg: string = result.message ?? "分享失败"
                  AlertDialog.show({
                    message:msg
                  })
                }
                  break
              }
            })
          })

备注:

1、用户授权鸿蒙app登录成功后,后台会派发临时票据code(短期且仅一次有效)。

2、业务获取code后,业务需通过code+应用秘钥(只能存后台,客户端泄露风险高),在业务后台获取openid+access_token+refresh_token。具体参考:[code换access_token接口](https://wiki.connect.qq.com/%E4%BD%BF%E7%94%A8authorization_code%E8%8E%B7%E5%8F%96access_token#:~:text=Step2%EF%BC%9A%E9%80%9A%E8%BF%87Authorization Code获取Access Token)

3、refresh_token有效期大于access_token,通过刷新可获取新的access_token+refresh_token,历史票据自动失效,因此,业务需要保存、刷新使用最新票据。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐