【问题标题】:How to use (Cordova) plugin with Ionic 2 / TypeScript?如何在 Ionic 2 / TypeScript 中使用 (Cordova) 插件?
【发布时间】:2016-11-02 18:54:07
【问题描述】:

我想将cordova-plugin-fcm 与 Ionic2/TypeScript 一起使用。包装器 FCMPlugin.js 看起来很简单,但我习惯 Angular2/TypeScript 使用 import 语句,不知道如何让这样的插件与 Ionic2 一起使用。

如果我使用代码获取令牌 (FCMPlugin.getToken()),我会得到:

找不到名称“FCMPlugin”

当我尝试这个suggested answer

我明白了:

需求未定义

【问题讨论】:

  • 你有cordova-plugin-fcm的打字稿声明文件吗?
  • 不,根本没有打字。通常我可以以某种方式解决这个问题,但这次我找不到解决方案。如果这个插件能像带有 d.ts 文件的原生 ionic-native 插件一样制作,那就太好了。在 GitHub 上,我要求提供一些指导,但问题已关闭...
  • 你可以尝试为它写一个ts文件,因为你说的功能很简单。
  • 是的,我想到了,查看了 ionic-native 中的一些 d.ts 文件。但我认为这对我来说有点牵强,从来没有这样做过,我不知道一些依赖关系的确切细节和离子插件的内部工作原理。

标签: javascript cordova typescript ionic-framework


【解决方案1】:

事实证明 suggested answer 毕竟是有效的。我只是犯了错误在浏览器中测试,看看我是否可以摆脱错误:

Cannot find name 'FCMPlugin'

然后这给了我:

Require is not defined

我以为我被困住了。 Cordova 仅在模拟器或真实设备上运行,但我认为我可以先在浏览器中进行一些测试,直到我摆脱错误(我不能)。但是,在模拟器或设备上运行代码时一切正常。

重要的是您必须摆脱 TypeScript 错误“找不到名称”,否则它将无法运行。要在没有类型定义文件(d.ts 文件)的情况下做到这一点,您只需声明一个变量,如:

declare var FCMPlugin:any;

就在导入的下方。

这样就不会出现 TypeScript 错误,一切都在模拟器/设备上运行良好。

【讨论】:

  • 不,对我不起作用。还是得到:FCMPlugin 没有定义
【解决方案2】:

如果您希望它与 TypeScript 一起使用,您可以在文件中声明为 @majodi 说:

declare var FCMPlugin: any;

但您不会有自动完成功能。

您还可以创建一个fcm-plugin.d.ts 文件以放入yourAppName/src/app/fcm-plugin.d.ts,它应该看起来像这样:

declare var fcmPlugin: FCMPlugin.IFCMPlugin;

// Support AMD require
declare module 'fcmPlugin' {
    export = fcmPlugin;
}

declare namespace FCMPlugin {
    interface IFCMPlugin {
        onNotification(onNotificationCallback, successCallback, errorCallback);
        getToken(successCallback, errorCallback);
        onTokenRefresh(onTokenRefreshCallback);
        subscribeToTopic(topic: string, successCallback, errorCallback);
        unsubscribeFromTopic(topic: string, successCallback, errorCallback);
    }
}

在确认您使用的是科尔多瓦设备后,不要忘记调用 fcmPlugin:

if (platform.is('cordova')) {
    fcmPlugin.getToken(token => {
        console.log('getToken() succeed: ', token);
    }, err => {
        console.error('getToken() failed: ', err);
    });
}

否则当你做ionic serve时会有fcmPlugin does not exists

然后您只需调用 fcmPlugin 并让 TypeScript 自动完成魔法发生!

【讨论】:

  • 还是有一些麻烦。似乎在收到推送消息时调用了successCallback 函数,但没有调用onNotificationCallback。也没有看到错误。有什么我可以去看看解决问题的吗?谢谢!
猜你喜欢
  • 2016-10-22
  • 2016-12-15
  • 2016-10-05
  • 2017-02-05
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多