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

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

目前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)?.handleAuthResult(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 原生使用

  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/使用authorization_code获取access_token#:~:text=Step2:通过Authorization Code获取Access Token)

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

内容有问题联系纠正Q:867374269

你可能感兴趣的:(鸿蒙qq,qq授权,qq分享,harmonyos,华为,鸿蒙系统,鸿蒙,sdkman)