Загрузка ссылки на плагин в app.js: NativeScript

Я разрабатываю приложение NativeScript, которое включает push-уведомления. Всякий раз, когда приходит push-уведомление, мне нужно хранить содержимое уведомления в базе данных.

Для этого я написал некоторый код в функции «onMessageReceived». Этот код находится на странице, на которой есть регистрационный код GCM.

Если приложение работает, то все работает нормально. Проблема в том, что если приложение закрыто, то функция onMessageReceived даже не выполняется (я проверил с помощью журналов консоли).

Поэтому для этого я пытаюсь поместить функцию «onMessageReceived» в app.js, чтобы даже приложение было закрыто, оно будет выполняться. Для этого я пытаюсь импортировать «nativescript-push-notifications» в app.js, но получаю ошибка, говорящая "приложение имеет значение null, оно передано неправильно". Ниже приведен мой код app.js.

app.js

var application = require("application");
var gcm=require("nativescript-push-notifications");
if(gcm.onMessageReceived) {
    gcm.onMessageReceived(function callback(data) { 
    console.log("message received:::: ", "" + JSON.stringify(data));
    storeInDatabase(data);// some function to store notification content into db. 

});
 }
application.mainModule="main-page";
application.start({ moduleName: "main-page" });

Можем ли мы импортировать ссылку "nativescript-push-notifications" в app.js??

Любые предложения будут полезными. Спасибо.


person Karteek    schedule 05.05.2016    source источник


Ответы (2)


Приложение недействительно, потому что ваше приложение еще не запущено, попробуйте добавить плагин в событие запуска приложения.

var application = require("application");
application.start({ moduleName: "main-page" });
application.on(application.launchEvent, function (args) {
    if (args.android) {
        var gcm = require("nativescript-push-notifications");
        gcm.register({ senderID: 'conversate-1148' }, function (data) {
            self.set("message", "" + JSON.stringify(data));
        }, function () { });
        if (gcm.onMessageReceived) {
            gcm.onMessageReceived(function callback(data) {
                console.log("message received:::: ", "" + JSON.stringify(data));
                 storeInDatabase(data);// some function to store notification content into db. 

            });
        }

    } else if (args.ios !== undefined) {
        //Do ios stuff here
    }
});
person Osei Fortune    schedule 05.05.2016
comment
Спасибо за ответ на мой вопрос. Добавление плагина в событие запуска приложения работает. Но все же, если приложение закрыто, функция ** gcm.onMessageReceived ** не выполняется. Пожалуйста, помогите, я застрял только в этом конкретном сценарии. - person Karteek; 06.05.2016

В дополнение к коду Osei вы можете проверить свой файл AndroidManifest.xml (созданный в вашей папке platform/android) и убедиться, что установлены следующие разрешения:

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

а также, что плагин зарегистрирован как служба в том же файле AndroidManifest.xml следующим образом:

<activity android:name="com.telerik.pushplugin.PushHandlerActivity"/>
<receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="com.pushApp.gcm" />
    </intent-filter>
</receiver>
<service android:name="com.telerik.pushplugin.PushPlugin" android:exported="false" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
    </intent-filter>
</service>
person Nick Iliev    schedule 05.05.2016
comment
Спасибо за ответ на мой вопрос. Я уже проверил AndroidManifest.xml, все соответствует ожиданиям. В чем моя проблема: если приложение закрыто, уведомление приходит, но функция onMessageReceived не выполняется. - person Karteek; 06.05.2016
comment
Возможно проблема с полезной нагрузкой. - person Hardik Vaghani; 06.09.2016