【问题标题】:After tns build android --release app doesn't make REST calls在 tns build android --release 应用程序不进行 REST 调用之后
【发布时间】:2021-03-04 18:56:33
【问题描述】:

转至this

我用 NativeScript + Angular 编写了一个跨平台应用程序。

我用这个命令创建.keystore文件(如documentation所示):

keytool -genkey -v -keystore <my-release-key>.keystore -alias <alias_name> -keyalg RSA -keysize 2048 -validity 10000

我使用以下命令构建发布 apk:

tns build android --release --key-store-path "C:\Program Files\Java\jre1.8.0_201\bin\<name>.keystore" --key-store-password <password> --key-store-alias <alias> --key-store-alias-password <alias-password>

然后我在我的 Android 设备(Android 9 和 Android 8)上安装了 apk 文件,但是当我尝试登录时(=> 进行 REST 调用)它什么也没做。 什么都没有显示,没有错误,也没有调用。

我使用的是 6.2.0 版本的 Nativescript。 我在将项目迁移到 NativeScript 6 后发现了这个问题。

我哪里错了?我错过了什么吗?

更新

我使用run 而不是build 尝试第二个命令,但是当我按下登录按钮时控制台没有显示任何内容。 控制台卡在了这句话上:

已成功安装在标识符为“xxxxxx”的设备上。

更新

我删除了“hooks”、“node_modules”和“platforms”文件夹,然后重新构建了应用程序,但没有任何改变。

更新 这是按钮的代码。

当我按下带有空电子邮件和空密码的按钮时,会发出第一个警报。

当我按下带有所有凭据的按钮时,会引发第二个警报。

即使凭据正确,也永远不会提出第三个问题。

login.component.ts

public login() {
      if(!this.user.email || !this.user.password){
        let options = {
            title: 'ATTENZIONE!',
            message: 'Inserire tutte le credenziali',
            okButtonText: 'OK'
        };

        alert(options);            //first
      } else {
         alert("HELLO WORLD!");    //second
         this.userService.login(this.user).subscribe((res) => {
           alert(res);             //third
           localStorage.setItem("authenticated", true);
           localStorage.setItem("access_token", "bearer " + res.access_token);
           localStorage.setItem("username", this.user.email);
         },
         (err)=>{
           console.log("Something went wrong "+err);
           alert("Credenziali errate");
           return;
         }
         );
       }
      return;
    }

user.service.ts

login(user: User) {
      let urlSearchParams = new URLSearchParams();

      urlSearchParams.append('username', user.email);
      urlSearchParams.append('password', user.password);
      urlSearchParams.append('grant_type','password');

      let body = urlSearchParams.toString();

      var url = Config.apiUrl + "/token";

      return this.http.post(url, body , { headers : this.getCommonHeaders() })
      .map(res => res.json())
      .catch( (error: any) => {Observable.throw(error.json().error)} );
}

http 来自@angular/http

【问题讨论】:

  • 您使用的是 http 服务器吗?在这种情况下,您需要在 AndroidManifest.xml 中添加网络安全配置文件/允许 cleartextTrafficPermitted="true"
  • 我正在使用用 asp.NET 创建的 https 服务器
  • 我更新了这个问题。有什么想法吗?

标签: android angular nativescript nativescript-angular


【解决方案1】:

我解决了我的问题,将 http 客户端从 @angular/core(已弃用)的 Http 更改为 @angular/common/httpHttpClient

【讨论】:

    猜你喜欢
    • 2019-02-04
    • 2015-01-27
    • 2020-02-15
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 2019-11-29
    相关资源
    最近更新 更多