当前位置: 首页 > article >正文

鸿蒙原生开发问题汇总 Api12

这三个月一直在进行鸿蒙原生开发,已经在应用市场发了App和元服务,期间陆续整理了一些笔记,现发布出来,也可以留言探讨。

下载三方包

下载三方包,需要配置 ohpm。前提是安装nodejs,去nodejs官网下载后配置PATH。然后再下载ohpm工具包,进行初始化后,再进行配置。

不过最新的编辑器好像直接自带了nodejs

users/michelle 资料库(Library)里有Huawei onpm。 /Users/michelle/Library/Huawei/ohpm

就是说要下载2个包:nodejs和ohpm,然后初始化./init后,再配置到环境变量里。文档:ohpm使用指导

interface 回调使用

interface写法变了

export interface OnCallBack<T = object> {
  // 这里不一样,不是这样:onSuccess(bean: T): void;
  onSuccess: (bean: T) => void;
  onError: (error: AxiosError) => void;
}

使用:

public static searchPageData(o: string, callBack: OnCallBack<BaseResultBean<SearchBean>>) {
    HttpUtil.getInstance().post<null, AxiosResponse<BaseResultBean<SearchBean>>, HomeBean>("/xx/xx", {
      o: o
    }).then((res: AxiosResponse<BaseResultBean<SearchBean>>) => {
      callBack?.onSuccess(res.data)
      console.error("1222------" + res.data.result!!.searchGoods)
      // if (res.data.result != null) {
      // }
    }).catch((error: AxiosError) => {
      callBack?.onError(error)
      console.log(JSON.stringify(error))
    })
  }
}

引用:

 HttpUtil.searchPageData("harmonyos", {
    onSuccess: (bean: BaseResultBean<SearchBean>): void => {
      if (bean.result != null) {
        this.message = bean.result
      }
    },
    onError: (error: AxiosError): void => {
      console.log('error:' + error.message);
    }
  })

华为登录

最新的next版本,不能获取到手机号。
不能获取手机号

  • 需要用真机;
  • 签名不用自动签名;Failed to login. Code: 1001500001, message: Failed to check the fingerprint of the app bundle.Fingerprint verification error.

Authorization Code。临时凭据,有效时间5分钟,并且只能使用一次

module.json5里加:

"metadata": [
  {
    "name": "client_id",
    "value": "775544333"  // 配置为获取的Client ID
  }
]

配置证书指纹(指纹配置成功后大约10分钟左右生效,请您耐心等待):

1.在module.json5 配置metadata --> client_id
2.AppGallery Connect平台 找到对应的项目,在里面配置“SHA256证书/公钥指纹”

需要注意包名要和开发的包名对应,client_id也是在这个应用取的

https://developer.huawei.com/consumer/cn/blog/topic/03147440682731014 获取公钥指纹步骤

(期间使用:hdc shell bm dump -n 包名 | findstr appIdfindstr错误,可以将findstr改为grep,即:hdc shell bm dump -n 包名 | grep appId

(hdc 需要配置环境变量,且只有在当前的命令窗口里有效)

最后登录:

huaweiLogin() {
    LogBevolUtil.error("---------start login")
    this.isShowLoading = true
    // 创建登录请求,并设置参数
    let loginRequest = new authentication.HuaweiIDProvider().createAuthorizationWithHuaweiIDRequest();
    // loginRequest.scopes = ['phone']; // 元服务不支持profile,需传其他支持的scope。配置openid的scope可以在响应中获取到openID、unionID
    // loginRequest.scopes = ['quickLoginAnonymousPhone','openid']; // 元服务不支持profile,需传其他支持的scope。配置openid的scope可以在响应中获取到openID、unionID
    loginRequest.scopes = ['openid', "profile"]; // 元服务不支持profile,需传其他支持的scope。配置openid的scope可以在响应中获取到openID、unionID
    // loginRequest.scopes = ["openid"]; // 元服务不支持profile,需传其他支持的scope。配置openid的scope可以在响应中获取到openID、unionID
    // loginRequest.permissions = ['serviceauthcode'];
    // loginRequest.permissions = ['quickLoginAnonymousPhone'];
    loginRequest.forceAuthorization = true;
    // false表示当用户未登录华为账号时,不会拉起华为账号登录界面;直接返回1001502001错误码。
    // loginRequest.forceLogin = false;
    // authRequest.state = util.generateRandomUUID(); // 应用建议使用generateRandomUUID生成state
    loginRequest.state = 'xxx'; // 元服务自定义生成
    loginRequest.idTokenSignAlgorithm = authentication.IdTokenSignAlgorithm.PS256;

    // 执行登录请求,并处理结果
    try {
      let controller = new authentication.AuthenticationController(getContext(this));
      controller.executeRequest(loginRequest, (error: BusinessError<Object>, data) => {
        if (error) {
          this.dealAllError(error);
          return;
        }
        let loginWithHuaweiIDResponse = data as authentication.AuthorizationWithHuaweiIDResponse;
        let state = loginWithHuaweiIDResponse.state;
        if (state != undefined && loginRequest.state != state) {
          this.handleLoginFail()

          hilog.error(0x0000, 'testTag', `Failed to login. The state is different, response state: ${state}`);
          return;
        }
        hilog.info(0x0000, 'testTag', 'Succeeded in login. %{public}s', JSON.stringify(loginWithHuaweiIDResponse));

        let loginWithHuaweiIDCredential = loginWithHuaweiIDResponse.data!;
        let code = loginWithHuaweiIDCredential.authorizationCode;
        // 得到code请求接口登录
        let idToken = loginWithHuaweiIDCredential.idToken;
        let openID = loginWithHuaweiIDCredential.openID;
        let unionID = loginWithHuaweiIDCredential.unionID;
        // loginWithHuaweiIDResponse.data.
        let anonymousPhone = loginWithHuaweiIDCredential.extraInfo?.quickLoginAnonymousPhone;
        LogBevolUtil.error("----anonymousPhone:" + anonymousPhone)
        LogBevolUtil.error("----openID:" + openID)
        LogBevolUtil.error("----unionID:" + unionID)

        // if (anonymousPhone) {
        //   hilog.info(0x0000, 'testTag', 'Succeeded in authentication');
        //   // 将匿名手机号传给第3步使用
        //   return;
        // }
        // 开发者处理code, idToken, openID, unionID
        // Authorization Code。临时凭据,有效时间5分钟,并且只能使用一次。证书不能使用自动获取形式。
        // Logger.error("----code:" + code)
        if (!isEmpty(unionID) && !isEmpty(openID)) {
          this.login(unionID, openID, code)
        } else {
          this.handleLoginFail()
        }
      });
    } catch (error) {
      this.dealAllError(error);
    }
  }

延迟执行

// 延迟显示
setTimeout(() => {
  this.isShowFooterView = true
}, 200)

元服务发布后域名访问不通

将域名添加到后台


http://www.kler.cn/news/364681.html

相关文章:

  • 如何将rust日志输出到android终端
  • ActivationType, Pool, ModelType(helpers文件中的classes.py)
  • 消息会话—发送消息自动滚动到最底部
  • PoissonRecon学习笔记
  • Qt 二进制文件的读写
  • vue-router3基本使用
  • 医疗成像中的点云处理:PCL库算法及其应用详解
  • 请写出js中的两种定时器,区别是什么?怎么清除定时器?
  • 外向交货单行项目修改自定义字段 BAPI_OUTB_DELIVERY_CHANGE 增强
  • ab命令深入解析:ApacheBench性能测试工具
  • FFMPEG录屏(18)--- 枚举Windows下的窗口列表并获取进程图标、标题、缩略图等
  • 光控资本:退市整理期啥意思,退市整理期交易规则?
  • 13 django管理系统 - 注册与登录 - 中间件控制访问
  • Redis项目中应用
  • 从 Hadoop 迁移到数据 Lakehouse 的架构师指南
  • 【日志】递归求斐波那契数列
  • 无人机之RTK定位定向技术篇
  • 自动化桌面通知:使用Plyer库实现工作提醒
  • Java根据word 模板,生成自定义内容的word 文件
  • Kmeans聚类算法简述
  • 计算机毕业设计Hadoop+Hive+Spark+Flink广告推荐系统 广告预测 广告数据分析可视化 广告爬虫 大数据毕业设计 深度学习 机器学习
  • 异地多活架构
  • 列出机器学习方向的创新点
  • Mac 安装 TIDB 并 启动集群
  • Java 如何确保 JS 不被缓存
  • mac切换java版本