在app.js中加载插件引用:NativeScript

时间:2016-05-05 10:24:33

标签: android push-notification google-cloud-messaging nativescript

我正在开发一个涉及推送通知的NativeScript应用程序。无论何时推送通知,我都需要将通知内容存储到数据库中。

为此,我在“onMessageReceived”函数中编写了一些代码。此代码位于GCM注册码所在的页面中。

如果应用正在运行,那么每件事情都运转良好。问题是如果应用程序关闭,那么“onMessageReceived”函数甚至没有执行(我使用控制台日志检查)。

所以为此我试图在app.js中放置“onMessageReceived”函数,这样即使应用程序关闭它也会执行。为此我试图在app.js中导入“nativescript-push-notifications” ,但收到错误说“应用程序为空,它没有正确传递” .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" });

我们可以在app.js中导入“nativescript-push-notifications”引用吗?

任何建议都会有所帮助。谢谢。

2 个答案:

答案 0 :(得分:5)

应用程序为空,因为您的应用尚未开始尝试在应用程序启动事件中添加插件

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

答案 1 :(得分:2)

除了Osei的代码,您可能需要查看AndroidManifest.xml文件(在您的platforms / 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>