目前QQ HarmonyOS SDK v1.0.2版本已经发布,各位应用开发者可参考接入文档说明提前熟悉接入流程;
*当前包含能力:扫码登录、授权登录,其他功能正在持续迭代中,敬请期待后续版本。
首先要申请QQ的 appId
注册开发者
使用App Linking实现应用间跳转
前期准备
ohpm i @tencent/qq-open-sdk // 大于1.0.3
ohpm install @zyl/qqcommonlibhar
在工程级 oh-package.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",
}
]
}
]
// 在业务 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-----注意注意
}
QQIsInstall(APP_ID_QQ)
QQLoginWithCallback传入appId,APP_KEY,reqOptions: AuthReqOptions,()=>{}返回promise
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,打开异常')
}
import { QQOpenApiHolder } from "@zyl/qqcommonlibhar"
// 如判断是否安装原生使用
const qqOpenApi: IQQOpenApi = QQOpenApiHolder.getInstance(APP_ID_QQ)
qqOpenApi.isQQInstalled()
QQShare
目前只支持图片文字 类型为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,历史票据自动失效,因此,业务需要保存、刷新使用最新票据。