2

プッシュ通知機能を含むNativeScriptを使用してAndroidアプリを開発しています。 プッシュメッセージが来るたびに、メッセージの詳細を保存する必要があります。この機能を実装するために、私はonMessageReceived関数を使用しました。プッシュ通知用のonMessageReceived関数の処理: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; 

APP-> App_Resources-> Android->のAndroidManifest.xml

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

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

0123にパーミッション

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

マニフェストファイルの内容の下で:node_modules-> nativescriptプッシュnotifications->プラットフォームの場合> 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> 

onMessageReceived関数では、いくつかのアクションを実行してからローカル通知をトリガーします。これは、onMessageReceived関数に通知を送信した場合、通知バーに表示されないためです。 dbに保存した後

アプリが実行されている場合は、onMessageReceived関数の内容が実行されています。 アプリケーションが閉じられても、onMessageReceivedの内容は実行されません(console.logも実行されなくても)。

アプリケーションが閉じられているときにonMessageReceived関数でデータを処理する方法はありますか?

ご意見はお役に立ちます。ありがとうございます。

+0

この記事に関するすてきな記事はこちらからご覧ください:https://bradmartin.net/2015/12/28/use-google-cloud-messaging-for-push-notifications-with-nativescript/ –

+1

こんにちは、返信ありがとうございます。私はpushnotificationsの概念を実装するために同じチュートリアルに従った。しかし、問題は、私はonMessageReceived function.Butでいくつかの操作を実行する必要があるアプリケーションが閉じている場合は、その関数は実行されていません。任意の提案を与えることができますか? – Karteek

+0

@Karteekこの問題を解決する方法はありますか?私は同じ問題を抱えています。 –

答えて

0

このプラグインを確認してください:https://github.com/EddyVerbruggen/nativescript-local-notifications

これは何が必要かもしれない

EDIT:

は、私は、あなたがonMessageReceivedをチェックしていることを何かに気づきます。代わりにこのコードを試してください:

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

また、正しくAndroidの権限を設定しましたか?

+1

reply.Previously私はlocalnotificationsを試みたが、私の特別な条件(アプリケーションが閉じている場合)も働いていません。あなたが私はonMessageReceivedチェックを削除して試してみましたが、今もアプリケーションがclosed.I編集my参照のための更新されたコードで投稿してください(onMessageReceivedチェックを削除し、実装されたローカル通知)。私が間違いをしているなら、私を修正してください。 – Karteek

+0

はい1秒後に同じ予定の通知をしました。プッシュ通知を受信して​​います。しかし、アプリが閉鎖されているときは、その時点でローカル通知がスケジュールされていないため、表示されません。 –

関連する問題