【问题标题】:How do I use cordova firebase.dynamiclinks plugin in Ionic 4?如何在 Ionic 4 中使用 cordova firebase.dynamiclinks 插件?
【发布时间】:2020-06-11 15:40:33
【问题描述】:

我想在我的 Ionic 4 应用程序中使用 Cordova Firebase Dynamiclinks 插件:https://github.com/chemerisuk/cordova-plugin-firebase-dynamiclinks#installation

还有一个 Ionic-native-plugin 用法:npm install @ionic-native/firebase-dynamic-links 和用法:

import { FirebaseDynamicLinks } from '@ionic-native/firebase-dynamic-links/ngx';

constructor(private firebaseDynamicLinks: FirebaseDynamicLinks) { }

...
this.firebaseDynamicLinks.onDynamicLink()
  .subscribe((res: any) => console.log(res), (error:any) => console.log(error));

问题是:我想使用 Cordova Firebase Dynamiclinks 插件中提供的 createDynamicLink(parameters) 方法,但 Ionic-native-plugin

“FirebaseDynamicLinks”类型上不存在“createDynamicLink”属性。

因此,我需要直接使用 Cordova Firebase Dynamiclinks,我尝试像使用它一样

import { cordova } from '@ionic-native/core';
...
cordova.plugins.firebase.dynamiclinks.createDynamicLink({
    link: "https://google.com"
}).then(function(url) {
    console.log("Dynamic link was created:", url);
}); 

但出现错误

类型 '(pluginObj: any, methodName: string, config: CordovaOptions, args: IArguments | any[]) => any' 上不存在属性 'plugins'。

还尝试删除导入

cordova.plugins.firebase.dynamiclinks.createDynamicLink({
    link: "https://google.com"
}).then(function(url) {
    console.log("Dynamic link was created:", url);
});

得到了这个

“CordovaPlugins”类型上不存在属性“firebase”。

cordova插件的正确用法是什么?

更新

Ionic-native-plugin 现在包含 Cordova Firebase Dynamiclinks 插件中可用的所有方法。

【问题讨论】:

    标签: firebase cordova ionic-framework firebase-dynamic-links


    【解决方案1】:

    我认为这更适合评论,但我还不太有名气。

    目前,@ionic-team/ionic-native repo (here) 中有一个公开的 PR。这暴露了额外的方法,但在此之前,您可以使用原始 repo here 来获得您想要的效果。为了安装 repo,您​​必须按照开发人员指南 here 中的说明进行操作。干杯!

    【讨论】:

    • 感谢您让我知道已打开的 PR。另外关于科尔多瓦错误,我可以通过如下声明科尔多瓦来解决它:declare var cordova : any;
    • 很遗憾,我认为您无法按照自己的意愿进行操作。您将无法直接通过 Cordova 对象访问FirebaseDynamicLinks 插件(这就是我们需要本机包装器的原因)。我建议等到 PR 合并或在本地为您的 repo 设置 PR 更改。
    • 只是想了解更多信息,您是在尝试使用 Angular 还是在引擎盖下做出反应?
    • 我使用的是angular,可以直接通过Cordova对象访问FirebaseDynamicLinks插件。
    • 我对 Angular 不是很熟悉(这里是反应人),但导出的 cordova 对象的文档是 here。看起来它可能需要用一些必要的参数来构造,然后才能尝试访问更深的部分。抱歉,我无法提供更多帮助!
    【解决方案2】:

    我开发了一个使用 Firebase 动态链接的 ionic 5 应用程序,它运行良好,但需要付出一些努力。我观看了视频以了解 Firebase 动态链接的工作原理,但肯定有很多内容没有显示。

    要回答最初的问题,您可以随时 manually create a dynamic link 这就是我在我们的解决方案中所做的。我们创建了一个动态链接,可以帮助用户登录(注册帐户)。我们的动态链接具有来自后端进程的自定义 onboardingId,该链接通过 SMS 文本消息呈现给用户。

    这是在 app.component.ts 构造函数中 以下是用户点击动态链接时发生的一些代码:

    // Handle the logic here after opening the app (app is already installed) with the Dynamic link
    this.firebaseDynamicLinks.onDynamicLink().subscribe((res: any) =>  {
      console.log('app was opened with dynamic link');
      console.log(res);
      /*   This only fires on subsequent calls and not on app start 20220208 STR
      console.log(JSON.stringify(res)); //"{"deepLink":"https://localhost/onboard?onboardingId=8ed634b0-53b7-4a0f-b67e-12c06019982a","clickTimestamp":1643908387670,"minimumAppVersion":0}"
      var dynamicLink = JSON.parse(JSON.stringify(res));
      var deepLink = dynamicLink.deepLink;
      console.log(deepLink);
      if (deepLink.indexOf("onboard")>=0){
        this.isOnboarding = true;
      }
      alert("deepLink ="+ deepLink);
      */
    }, (error:any) => {
      console.log(error)
    });
    

    我最初认为如果用户没有安装应用程序,Firebase 会处理所有的魔法。我错了!您还必须在应用安装后处理代码以获取动态链接。

    下面的代码将从剪贴板读取动态链接并在应用安装过程中继续存在。放在 app.component.ts ngOnInit() 中。

    this.platform.ready().then(() => {
    
      this.firebaseDynamicLinks.getDynamicLink().then((data) => {
        //added 20220208 STR try to help open the deep link if app is just installed
        if (data != null) {
          console.log(JSON.stringify(data));
          //alert("initializeApp():"+JSON.stringify(data));
          var dynamicLink = JSON.parse(JSON.stringify(data));
          var deepLink = dynamicLink.deepLink;
          console.log("initializeApp():"+deepLink);
          if (deepLink != "") {
            if (deepLink.indexOf("onboard")>=0){
              this.isOnboarding = true;
              this.deepLinkToOnboard(deepLink);
            }
          }
        }
      });}
    

    因此,要在安装 Firebase 插件后处理动态链接,您必须有两段代码;一个用于处理已安装应用程序,另一个用于处理未安装应用程序的动态链接。

    【讨论】:

      猜你喜欢
      • 2019-02-05
      • 2020-08-29
      • 1970-01-01
      • 2015-04-08
      • 2016-11-02
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      相关资源
      最近更新 更多