2016-06-30 2 views
1

Я хотел бы использовать cordova-plugin-fcm с Ionic2/TypeScript. Оболочка FCMPlugin.js выглядит очень просто, но я привык к Angular2/TypeScript, работающему с операторами импорта, и не знаю, как получить такой плагин для работы с Ionic2.Как использовать (Cordova) плагин с Ionic 2/TypeScript?

Если я использую код, чтобы получить маркер (FCMPlugin.getToken()) я получаю:

Cannot find name 'FCMPlugin'

Когда я пытаюсь это suggested answer

я получаю:

Require is not defined

+1

У вас есть файл декларации машинописных файлов для 'cordova-plugin-fcm'? – MarkoCen

+0

Нет, никаких типизирования вообще. Обычно я могу как-то обойти это, но на этот раз я не могу найти решение. Было бы неплохо, если бы этот плагин был бы подобным, как родные плагины с ионным подключением с файлом d.ts. На GitHub я попросил несколько советов, но проблема была закрыта ... – majodi

+0

вы можете попытаться написать файл ts для него, так как вы сказали, что функции довольно просты. – MarkoCen

ответ

0

Оказывается suggested answer является работа в конце концов. Я только что сделал ошибку, чтобы проверить в браузере, чтобы увидеть, если я мог бы избавиться от ошибки:

Cannot find name 'FCMPlugin' 

Это потом дал мне:

Require is not defined 

И я думал, что я застрял. Кордова работает только на симуляторе или на реальном устройстве, но я подумал, что сначала смогу пройти тестирование в браузере, пока не избавлюсь от ошибок (чего я не смог). Однако при запуске кода на симуляторе или устройстве все в порядке.

Важно, однако, что вам нужно избавиться от ошибки TypeScript «Невозможно найти имя», иначе он не будет работать. Чтобы сделать это без файла определения типа (а d.ts файл), можно просто объявить переменную как:

declare var FCMPlugin:any; 

чуть ниже импорта.

Тогда не будет ошибки TypeScript, и все будет отлично работать на симуляторе/устройстве.

+0

Нет, не работал для меня. Все еще получить: FCMPlugin не определен – Richard

0

Если вы хотите работать с машинопись, вы можете объявить в файле, как @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 после проверки, что вы находитесь на Cordova устройства:

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

в противном случае будет иметь fcmPlugin does not exists, когда вы делаете ionic serve

Тогда вы просто для вызова fcmPlugin и создания магии автозавершения TypeScript!

+0

Имея некоторые проблемы с этим все еще. Кажется, функция 'successCallback' get get вызывается, когда получено push-сообщение, но' onNotificationCallback' не вызывается. Ошибок не обнаружено. На что я могу пойти, чтобы разобраться? Благодаря! – demaniak