1

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

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

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

Так что для этого я пытаюсь разместить функцию «onMessageReceived» в app.js, так что даже приложение закрыто, оно будет выполнено. Для этого я пытаюсь импортировать «nativescript-push-notifications» в приложении. js, но получить сообщение об ошибке «приложение равно null, оно не передано правильно» .Below - это мой код 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-уведомления" ссылка в app.js ??

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

ответ

5

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

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 
    } 
}); 
+0

Спасибо, что ответили на мой вопрос. Добавление плагина в событие запуска приложения работает. Но если приложение закрыто, то функция ** gcm.onMessageReceived ** не выполняется. Пожалуйста, помогите, я застрял только в этом конкретном сценарий. – Karteek

2

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

<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> 
+0

Спасибо, что ответили на мой вопрос. Я уже проверил AndroidManifest.xml. Все, что я ожидал. Какая моя проблема, если приложение закрыто, тогда приходит уведомление, но ** функция «onMessageReceived» ** не выполняется. – Karteek

+0

Может быть проблемой полезной нагрузки. –

Смежные вопросы