Android 正在app.js:NativeScript中加载插件引用
我正在开发一个包含推送通知的NativeScript应用程序。每当推送通知出现时,我都需要将通知内容存储到数据库中 为此,我在“onMessageReceived”函数中编写了一些代码。这些代码位于GCM注册代码所在的页面中 若应用程序正在运行,那个么一切正常。问题是,如果应用程序关闭,那么“onMessageReceived”函数甚至没有执行(我查看了控制台日志) 因此,我试图在app.js中放置“onMessageReceived”函数,以便即使关闭app,它也会执行。为此,我尝试在app.js中导入“nativescript推送通知”,但收到的错误是:“应用程序为空,未正确传递”。下面是我的app.js代码 app.jsAndroid 正在app.js:NativeScript中加载插件引用,android,push-notification,google-cloud-messaging,nativescript,Android,Push Notification,Google Cloud Messaging,Nativescript,我正在开发一个包含推送通知的NativeScript应用程序。每当推送通知出现时,我都需要将通知内容存储到数据库中 为此,我在“onMessageReceived”函数中编写了一些代码。这些代码位于GCM注册代码所在的页面中 若应用程序正在运行,那个么一切正常。问题是,如果应用程序关闭,那么“onMessageReceived”函数甚至没有执行(我查看了控制台日志) 因此,我试图在app.js中放置“onMessageReceived”函数,以便即使关闭app,它也会执行。为此,我尝试在app.
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" });
我们可以导入app.js中的“nativescript推送通知”引用吗
任何建议都会有帮助。谢谢。应用程序为空,因为您的应用程序尚未启动,请尝试在应用程序启动事件中添加插件
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
}
});
应用程序为空,因为您的应用程序尚未启动,请尝试在应用程序启动事件中添加插件
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
}
});
除了Osei的代码外,您可能还希望签出您的AndroidManifest.xml文件(在平台/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>
除了Osei的代码之外,您可能还想签出您的AndroidManifest.xml文件(在平台/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>
感谢您回答我的问题。在应用程序启动事件中添加插件是可行的。但如果应用程序已关闭,则**“gcm.onMessageReceived”**函数未执行。请帮助我仅在这个特定场景中遇到问题。感谢您回答我的问题。在应用程序启动事件中添加插件正在工作。但如果应用程序已关闭,则**“gcm.onMessageReceived”**函数未执行。请帮助我,我只是在这个特定的场景中遇到了问题。感谢您回答我的问题。我已经检查了AndroidManifest.xml,一切都如预期的那样。我的问题是,如果应用程序关闭,则会发出通知,但“onMessageReceived”函数未执行。可能是有效负载的问题。感谢您回答我的问题。我已经检查了AndroidManifest.xml,所有事情都如预期的那样。我的问题是,如果应用程序关闭,则会发出通知,但“onMessageReceived”函数未执行。可能是有效负载的问题。