2

Ich entwickle eine Android-App mit NativeScript, die Push-Benachrichtigungen Funktionalität enthält. Immer wenn Push-Nachricht kommt muss ich die Nachrichtendetails speichern. Zur Implementierung dieser Funktionalität habe ich onMessageReceived Funktion verwendet.Umgang mit OnMessageReceived Funktion für Push-Benachrichtigungen: NativeScript

App.js file::::: 

var application=require("application"); 
var applicationSettings = require("application-settings"); 
application.mainModule="Registration/Registration"; 
// application.mainModule="CreateTask/CreateTask"; 
application.css="styles/Follow.css"; 
application.start(); 
application.on(application.launchEvent, function (args) { 
if (args.android) { 
    var gcm = require("nativescript-push-notifications"); 
    gcm.register({ senderID: '616557539872' }, function (data) { 
     console.log("message"+ JSON.stringify(data)); 
    }, function() { }); 
     gcm.onMessageReceived(function callback(data) { 
      console.log("message received:::: ", "" + JSON.stringify(data)); 
     // some code for storing notification contents to database 
      var notifications=require("~/notifications"); 
      notifications.createViewModel(data); 

     }); 

} else if (args.ios !== undefined) { 
    //Do ios stuff here 
} 
}); 

notifications.js

var LocalNotifications = require("nativescript-local-notifications"); 
var dialogs = require("ui/dialogs"); 
var frameModule=require("ui/frame"); 

var notifications=new Object(); 
function doAddOnMessageReceivedCallback() { 
console.log("doAddOnMessageReceivedCallback::"); 
LocalNotifications.addOnMessageReceivedCallback(
    function(notificationData) { 

     frameModule.topmost().navigate("Registration/Registration"); 
     dialogs.alert({ 
      title: "Notification received", 
      message: "ID: " + notificationData.id + 
      "\nTitle: " + notificationData.title + 
      "\nBody: " + notificationData.body, 
      okButtonText: "Excellent!" 
     }); 
    } 
); 
} 

function createViewModel(data) { 
    console.log("createViewModel::"+data); 
    doAddOnMessageReceivedCallback(); 
    LocalNotifications.schedule([{ 
     id: 0, 
     title: "AddTaskNotification", 
     body: data, 
     ticker: this.ticker, 
     at: new Date(new Date().getTime()) 
    }]).then(() => { 
     console.log("Notification scheduled"); 
    }, (error) => { 
     console.log("ERROR", error); 
    }); 

} 

exports.createViewModel = createViewModel; 

Berechtigungen in app-> App_Resources-> Android-> AndroidManifest.xml

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.INTERNET"/>

<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"/>

Manifest-Datei Inhalte unter: node_modules-> nativescript-push-notifications-> platforms-> Android-> AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"> 

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<application> 
    <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> 
</application> 

In onMessageReceived Funktion Ich bin eine Aktion durchführen und dann eine lokale notification.I'm Triggern wie dies zu tun, weil, wenn ich Funktion onMessageReceived gab dann Benachrichtigung nicht in Benachrichtigung zeigt, bar.So Ich bin auslösen lokale Benachrichtigung nach dem Speichern in db.

Wenn App ausgeführt wird, wird der Inhalt der onMessageReceived-Funktion ausgeführt. Wie auch immer, wenn App geschlossen ist, wird der Inhalt von onMessageReceived nicht ausgeführt (auch console.log wird nicht ausgeführt).

Wie behandelt man Daten in onMessageReceived Funktion, wenn App geschlossen ist?

Alle Vorschläge werden hilfreich sein. Danke.

+0

Einen schönen How-to Artikel zu diesem Thema finden Sie hier: https://bradmartin.net/2015/12/28/use-google-cloud-messaging-for-push-notifications-with-nativescript/ –

+1

Hallo, Danke für die Antwort. Ich folgte dem gleichen Tutorial um das Push-Notifications-Konzept zu implementieren.Aber das Problem ist, dass ich etwas Operation in der onMessageReceived Funktion durchführen muss. Aber diese Funktion führt nicht aus, wenn APP geschlossen wird. Können Sie irgendwelche Vorschläge geben ?? – Karteek

+0

@Karteek Haben Sie jemals eine Lösung für dieses Problem gefunden? Ich habe das gleiche Problem. –

Antwort

0

Bitte aktivieren Sie dieses Plug-in: https://github.com/EddyVerbruggen/nativescript-local-notifications

Dies könnte das sein, was Sie brauchen,

EDIT:

ich etwas bemerken, dass Sie die onMessageReceived werden überprüft; Bitte versuchen Sie diesen Code stattdessen:

var gcm=require("nativescript-push-notifications"); 
gcm.onMessageReceived(function callback(data) { 
    console.log("message received:::: ", "" + JSON.stringify(data)); 
    // code related to saving the details... 
}); 

Auch haben Sie richtig die Android-Berechtigungen ??

+1

Danke für die Antwort.Vorübergehend versuchte ich localnotifications aber das funktioniert auch nicht für meine spezielle Bedingung (wenn App geschlossen ist). Wie Sie vorgeschlagen, ich entfernte onMessageReceived checking und dann versucht, aber jetzt auch nicht funktioniert, wenn App geschlossen ist Post mit dem aktualisierten Code für die Referenz (Entfernen onMessageReceived überprüfen, implementiert localnotification). Wenn ich irgendwelche Fehler mache, bitte korrigieren Sie mich. – Karteek

+0

Ja, ich habe die gleiche, geplante Benachrichtigung nach 1 sek. beim Empfang einer Push-Benachrichtigung. Wenn die App geschlossen wird, wird die lokale Benachrichtigung zu diesem Zeitpunkt nicht geplant und daher nicht angezeigt. –