我想将cordova-plugin-fcm
与Ionic2 / TypeScript一起使用。包装器FCMPlugin.js看起来很简单,但我习惯使用Angular2 / TypeScript处理import语句,并且不知道如何使用这样的插件来使用Ionic2。
如果我使用代码获取令牌(FCMPlugin.getToken()
),我会得到:
找不到名称'FCMPlugin'
当我尝试这个suggested answer
时我明白了:
未定义要求
答案 0 :(得分:0)
事实证明suggested answer正在发挥作用。我只是错误地在浏览器中测试,看看我是否可以摆脱错误:
Cannot find name 'FCMPlugin'
然后给了我:
Require is not defined
我以为我被卡住了。 Cordova只能在模拟器或真实设备上运行,但我认为我可以先在浏览器中进行一些测试,直到我摆脱错误(我无法做到)。但是,在模拟器或设备上运行代码时,一切都很好。
重要的是,你必须摆脱TypeScript错误“找不到名字”否则它将无法运行。要在没有类型定义文件(d.ts文件)的情况下执行此操作,您只需声明一个类似的变量:
declare var FCMPlugin:any;
低于进口货物。
然后就没有TypeScript错误,一切都在模拟器/设备上运行得很好。
答案 1 :(得分:0)
如果您希望它与TypeScript一起使用,您可以在文件中声明 @majodi 说:
A1
但你不会自动完成。
您还可以创建一个declare var FCMPlugin: any;
文件放入fcm-plugin.d.ts
,它应该如下所示:
yourAppName/src/app/fcm-plugin.d.ts
在检查您使用的是Cordova设备后,请不要忘记拨打fcmPlugin:
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);
}
}
当您执行if (platform.is('cordova')) {
fcmPlugin.getToken(token => {
console.log('getToken() succeed: ', token);
}, err => {
console.error('getToken() failed: ', err);
});
}
fcmPlugin does not exists
然后你只需要调用fcmPlugin并让TypeScript自动完成魔术发生!