为Cordova应用程序创建通用链接[Deep Link]作为邮件发送

时间:2017-01-20 08:46:59

标签: android cordova ionic-framework cordova-plugins deep-linking

我有 Android&使用cordova开发的IOS 应用程序。我有一个场景,我必须从作为邮件发送的链接打开我的移动应用程序。

我使用的插件是 Cordova Universal Links Plugin ,我也遵循相同的方法来包含链接并从链接中打开应用程序。

该插件的链接是here.当我尝试打开该应用时,其失败。如何创建作为邮件发送以打开移动应用程序的链接?

JS代码是

var app = {
    // Application Constructor
    initialize: function () {
        this.bindEvents();
    },

    // Bind Event Listeners
    bindEvents: function () {
        document.addEventListener('deviceready', onDeviceReady.bind(this), false);
    },

    // deviceready Event Handler
    onDeviceReady: function () {
        console.log('Device is ready for work');
        universalLinks.subscribe('openNewsListPage', app.onNewsListPageRequested);
        universalLinks.subscribe('openNewsDetailedPage', app.onNewsDetailedPageRequested);

        document.addEventListener('pause', onPause.bind(this), false);
        document.addEventListener('resume', onResume.bind(this), false);

        // TODO: Cordova has been loaded. Perform any initialization that requires Cordova here.
        var parentElement = document.getElementById('deviceready');
        var listeningElement = parentElement.querySelector('.listening');
        var receivedElement = parentElement.querySelector('.received');
        listeningElement.setAttribute('style', 'display:none;');
        receivedElement.setAttribute('style', 'display:block;');
    },

    // openNewsListPage Event Handler
    onNewsListPageRequested: function (eventData) {
        console.log('Showing list of awesome news.');

        // do some work to show list of news
    },

    // openNewsDetailedPage Event Handler
    onNewsDetailedPageRequested: function (eventData) {
        console.log('Showing to user details page: ' + eventData.path);

        // do some work to show detailed page
    }
};

app.initialize();

的Config.xml

<universal-links>
<host name="myhost.com">
  <path url="/news/" event="openNewsListPage" />
  <path url="/news/*" event="openNewsDetailedPage" />
</host>

1 个答案:

答案 0 :(得分:0)

我正试图通过使用另一个插件来回答这个问题。好吧,今天天气很好:D 就我而言,我有制作重置密码链接以打开应用的经验

这同样适用于Android和iOS。

如何创建链接以邮件形式发送以打开手机 申请吗?

您可以尝试使用此https://ionicframework.com/docs/native/deeplinks

此插件可以处理iOS和Android上的自定义URL方案链接和通用应用链接的深层链接。

第1步:将Cordova和ionic native插件安装到您的项目中

npm install @ionic-native/deeplinks

ionic cordova plugin add ionic-plugin-deeplinks --variable URL_SCHEME=myapps --variable DEEPLINK_SCHEME=https --variable DEEPLINK_HOST=domain.oo--variable ANDROID_PATH_PREFIX=/

第2步:将其添加到app.component.ts

 getDeeplink() {
    this.deeplinks.route({
      '/reset/:data': ForgotPasswordPage
    }).subscribe((match) => {
      console.log('Successfully matched route', match);

      // contains original string
      let data = match.$link.path;

      // email string
      let email = data.slice(7);
      email = email.substring(0, email.indexOf("&"));

      // token string
      let token = data.split("&").pop();

      // contains email and token from email
      let objectData = {
        email,
        token
      }

      console.log(email);
      console.log(token);
      console.log(objectData);

      let navigationExtras: NavigationExtras = {
        state: {
          data: objectData
        }
      }
      this.router.navigate(['/reset-password'], navigationExtras);
    }, (nomatch) => {
      console.error('Got a deeplink that didn\'t match', nomatch);
    });
  }

在单击电子邮件中的链接后,让我解释一下(基本上来自https://domain.oo/redirect/的链接包含重定向到深层链接的代码,它重定向到

myapps://reset/myemail@gmail.com&2ahUKEwjKyPSbwZvpAhU0ErcAHXIbCVsQ_AUoAHoECAEQAA

重置在函数内部声明,如您所见 / reset /:data :数据包含电子邮件和令牌,您可以使用它们重置密码。

它捕获了此深层链接,您可以在 match。$ link.path; 中检索值,并使用路由器将其传递到下一页。

您可以在准备就绪的平台内使用此功能:

  initializeApp() {
    this.platform.ready().then(() => {
      this.statusBar.hide();
      this.statusBar.styleDefault();
      this.splashScreen.hide();
      this.getDeeplink();
    });
  }

如果您想在不单击链接的情况下测试应用程序内的深层链接,则可以在Android上使用Android调试桥(ADB) 来源:I am trying to test android deep link urls through adb to launch my app

adb shell开始-android.intent.action.VIEW -d“ myapps://reset/testing@domain.com&2ahUKEwjKyPSbwZvpAhU0ErcAHXIbCVsQ_AUoAHoECAEQAA” com.myapp