HarmonyOS 鸿蒙Next uni-app QQ登录,怎么读取都是provider里没有qq

HarmonyOS 鸿蒙Next uni-app QQ登录,怎么读取都是provider里没有qq 【问题描述】:uniapp进行开发,想接入qq登录,但是读取用户qq但是读取的都是provider里没有qq

【问题现象】:uniapp读取不到用户qq

【版本信息】:NA

【复现代码】:NA

【尝试解决方案】:NA

5 回复

开发者你好,由于uni.shareuni.login方法在HarmonyOS上暂不支持分享到QQ、QQ授权登录,还请参考以下示例使用QQ提供的SDK来完成QQ授权登录: 实现步骤: UTS插件:

  1. @tencent/qq-open-sdk目前支持登录、分享功能。
  2. @ohos/crypto-js用于本地签名,生产环境建议使用后端签名。
  3. QQ HarmonyOS SDK中Demo工程中的QQOpenApiHolder.ets文件,直接复制进UTS插件。
  4. 封装分享QQ聊天方法。
import { Want } from '@kit.AbilityKit';

import { IQQOpenApi, ShareData, ShareResult, ShareResultType } from '[@tencent](/user/tencent)/qq-open-sdk';
import CryptoJS from '[@ohos](/user/ohos)/crypto-js';

import { QQOpenApiHolder } from './QQOpenApiHolder.ets';

UTSHarmony.onAppAbilityCreate(() => {
  QQOpenApiHolder.create();
})
UTSHarmony.onAppAbilityNewWant((want : Want) => {
  QQOpenApiHolder.getInstance()?.handleResult(want);
})

/**
 * 调用业务后台接口对分享内容生成签名,此处以本地签名为例
 * @param appId
 * @param shareDataStr
 * @param timestamp
 * @param nonce
 * @returns
 */
export async function demoGenSign(appId : string | number, shareDataStr : string, timestamp : number, nonce : number) : Promise<string> {
  const totalStr = `POSTconnect.qq.com/share?appid=${appId}&nonce=${nonce}&ts=${timestamp}&${shareDataStr}`;
  const hmac = CryptoJS.HmacSHA1(totalStr, 'vgGckeQ0QfhW6QUP');
  const sign = hmac.toString(CryptoJS.enc.Base64);
  return sign;
}

export async function shareToQQ(shareDataStr : string) : Promise<void | ShareResult> {
  const qqOpenApi : IQQOpenApi = QQOpenApiHolder.getInstance();
  const shareData : ShareData = new ShareData();
  // 生成时间戳
  shareData.timestamp = Date.now();
  // 生成随机整数
  shareData.nonce = Math.floor(Math.random() * 100000000 + 100);
  shareData.shareJson = shareDataStr;
  shareData.shareJsonSign = await demoGenSign(qqOpenApi.appId, shareDataStr, shareData.timestamp, shareData.nonce);
  const promise : Promise<void | ShareResult> = qqOpenApi.share(2, shareData).then((result : ShareResult) => {
    if (result.resultType === ShareResultType.Success) {
      uni.showToast({
        title: '分享成功'
      })
    }
    if (result.resultType === ShareResultType.Cancel) {
      const msg : string = result.message ?? "用户取消分享"
      uni.showToast({
        title: msg
      })
    }
    if (result.resultType === ShareResultType.Error) {
      const msg : string = result.message ?? "分享失败"
      uni.showModal({
        content: msg,
        showCancel: false
      })
    }
    return result;
  });
  return promise;
}
  1. 封装QQ授权登录方法,授权完成后会获取authCode,后续需要业务后台到"QQ互联"后台换取授权accessToken,并获取用户QQ信息。
export function LoginWithCallback() {
  const qqOpenApi : IQQOpenApi = QQOpenApiHolder.getInstance();
  qqOpenApi.login({
    scope: "all",
    useQrCode: false,
    networkTimeout: 0,
    forceWebLogin: false
  } as AuthReqOptions)
    .then((result : AuthResult) => {
      console.info(`testLoginWithPromise then : ${JSON.stringify(result)}`)
      if (result.type == AuthResultType.Success) {

        let code : string | undefined = result.authResponse?.authCode
        if (code) {
          // 获取server-side授权code成功,后续需要业务后台到"QQ互联"后台换取授权accessToken,并获取用户QQ信息。
        }
      } else if (result.type == AuthResultType.Cancel) {
        uni.showToast({
          title: (result.message ?? "")
        });
      } else if (result.type == AuthResultType.Error) {
        uni.showToast({
          title: (result.message ?? "")
        });
      }
    }).catch(() => {

    })
}

插件依赖:config.js中配置三方依赖:

{
  "dependencies": {
    "[@tencent](/user/tencent)/qq-open-sdk": "1.0.3",
    "[@ohos](/user/ohos)/crypto-js": "^2.0.5"
  }
}

页面调用: 导入UTS插件的shareToQQ和LoginWithCallback方法:

<template>
  <view class="content">
    <button type="default" @click="share">QQ分享</button>
    <button type="default" @click="login">QQ授权登录</button>
  </view>
</template>

<script>
  import {
    shareToQQ,
    LoginWithCallback
  } from "@/uni_modules/my-qq-sdk"
  export default {
    data() {
      return {
        title: 'Hello'
      }
    },
    onLoad() {

    },
    methods: {
      share() {
        const data = {
          "msg_style": 0,
          "title": "HarmonyOS ARK图文",
          "summary": "ARK分享的内容",
          "brief": "互联分享",
          "url": "https://www.baidu.com",
          "picture_url": "https://www.xxx.com/xxx.png"
        };
        shareToQQ(JSON.stringify(data)).then((res) => {
          console.info(res);
        });
      },
      login() {
        LoginWithCallback();
      }
    }
  }
</script>

<style>
  .content {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }

  .content button {
    width: 100%;
  }
</style>

【参考链接】:uni-app实现QQ分享、QQ授权登录示例

更多关于HarmonyOS 鸿蒙Next uni-app QQ登录,怎么读取都是provider里没有qq的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app集成QQ登录可参考示例代码:https://developer.huawei.com/consumer/cn/forum/topic/0204198524703889005

仓库链接在帖子最后面

问下qq吧

鸿蒙Next中uni-app的QQ登录读取问题,是因为当前鸿蒙Next版本暂未集成QQ登录SDK。鸿蒙Next采用纯鸿蒙内核,不再兼容安卓生态,因此原有的安卓版QQ登录SDK无法直接使用。目前华为官方提供的登录服务为华为帐号登录,第三方登录如QQ、微信等需等待后续官方适配或由第三方厂商提供鸿蒙原生SDK。

在HarmonyOS Next上使用uni-app进行QQ登录时,出现“provider里没有qq”的错误,通常是因为QQ登录能力尚未在HarmonyOS Next的官方生态中直接提供支持。HarmonyOS Next目前主要推动华为自身的帐号、支付等服务体系,对于第三方社交登录(如QQ),其集成方式可能与Android/iOS平台不同。

可能原因与解决方向:

  1. 检查HarmonyOS Next的SDK支持
    HarmonyOS Next的开放能力主要围绕华为移动服务(HMS)构建。目前,QQ登录可能未作为标准登录Provider直接集成到HarmonyOS的认证框架中。你需要确认:

    • 是否使用了HarmonyOS官方提供的Account Kit(华为帐号登录)或其他支持的第三方登录方式。
    • 查看HarmonyOS开发者文档中关于“社交登录”或“第三方认证”的说明,确认QQ是否在支持列表中。
  2. uni-app的适配问题
    uni-app的QQ登录插件通常针对Android/iOS平台封装,可能未适配HarmonyOS Next。你需要:

    • 检查uni-app插件市场中的QQ登录插件是否声明支持HarmonyOS Next。
    • 若无支持,可能需要自行封装HarmonyOS Native的QQ登录能力(如果QQ提供了HarmonyOS SDK),或通过Web方式跳转QQ登录。
  3. 备用方案建议

    • 优先使用华为帐号登录(Account Kit),这是HarmonyOS Next最稳定的认证方案。
    • 若必须使用QQ登录,可尝试通过Web网页授权方式实现:引导用户跳转到QQ的OAuth网页进行登录,再回调到应用。但需注意HarmonyOS Next对Web视图的兼容性。
    • 联系QQ开放平台,咨询是否有HarmonyOS Next的SDK或适配计划。

操作建议:

  • 访问HarmonyOS开发者官网,查阅最新版本文档的“登录与认证”部分。
  • 在uni-app项目中,检查manifest.json或模块配置中是否正确声明了QQ登录权限或模块。

由于HarmonyOS Next仍在快速演进中,第三方服务的集成可能需要等待官方或服务提供方的进一步适配。建议关注HarmonyOS的版本更新公告,以获取最新的能力支持信息。

回到顶部