Cordova Phonegap 本地通知无法正常工作

9

首先,我想说这是一个非常好的插件 (https://github.com/katzer/cordova-plugin-local-notifications) ,但我在使用过程中遇到了一些困难。

我正在使用 Android 和 Phonegap CLI。我尝试过 CLI 5.0 和现在的 Phonegap 3.5.0,这是我的 config.xml:

<preference name="phonegap-version" value="3.5.0" />

在我的 config.xml 中,我尝试了所有这些组合:

<plugin name="de.appplant.cordova.plugin.local-notification"  spec="0.8.1" source="pgb" />
<gap:plugin name="de.appplant.cordova.plugin.local-notification" />
<plugin name="de.appplant.cordova.plugin.local-notification" source="pgb" />

然而,通知不会出现 - 手机上什么都没有发生 - 没有任何反应。我也已经下载了KitchenSink App (https://github.com/katzer/cordova-plugin-local-notifications/tree/example) 并在Phonegap构建和我的手机上进行了安装,但同样没有任何反应。
这是我的index.html代码,所以当手机触发时,它应该尽快注册本地通知:
cordova.plugins.notification.local.registerPermission(function (granted) {
    // console.log('Permission has been granted: ' + granted);
});

cordova.plugins.notification.local.schedule({
    id: 1,
    title: 'Reminder',
    text: 'Dont forget to pray today.',
    every: 'minute',
    icon: 'res://icon',
    smallIcon: 'res://ic_popup_sync'
});

我也尝试过。
cordova.plugins.notification.local.schedule({
    id: 2,
    text: "Good morning!",
    firstAt: tomorrow_at_8_am,
    every: "day" // "minute", "hour", "week", "month", "year"
});

连厨房水池应用程序也无法使用 - 手机上什么也没有发生??

我的Android版本是:5.1.1

如何在Phonegap中使本地通知显示?


你有确认设备准备好事件(deviceready)是否已触发吗? - Soturi
是的,应用程序会响应此操作。我已经在Phonegap构建和在手机上制作.apk时进行了console.log和各种其他测试 - 厨房水槽应用程序也无法正常工作。 - TheBlackBenzKid
@TheBlackBenzKid 你好,我正在尝试使用kitchensink应用程序。明天会告诉你结果。但是我注意到一个问题,就是在下载示例代码时插件文件夹没有被正确地提取。我无法在插件中找到“de.appplant.cordova.plugin.local-notification”文件夹。我只能看到大小为1kb的“de.appplant.cordova.plugin.local-notification”文件。所以你能否通过检查插件文件夹来确认你的插件是否已经正确安装? - Gandhi
@TheBlackBenzKid 有关于这个的任何更新吗?你成功让它工作了吗? - Gandhi
1
你是如何尝试的?通知只应在应用程序处于后台时出现,可能你正在前台测试。 - Víctor
@Del 当你在应用程序中时,可以看到本地通知。 - Mark
2个回答

4
我也花了很多时间来让这个插件工作,而且我已经成功了,但我发现它是最难搞的之一。
在你的js代码中 -
var testNotifications = function () {

document.addEventListener("deviceready", function () {

  console.warn("testNotifications Started");

  // Checks for permission
  cordova.plugin.notification.local.hasPermission(function (granted) {

    console.warn("Testing permission");

    if( granted == false ) {

      console.warn("No permission");
      // If app doesnt have permission request it
      cordova.plugin.notification.local.registerPermission(function (granted) {

        console.warn("Ask for permission");
        if( granted == true ) {

          console.warn("Permission accepted");
          // If app is given permission try again
          testNotifications();

        } else {
          alert("We need permission to show you notifications");
        }

      });
    } else {

      var pathArray = window.location.pathname.split( "/www/" ),
          secondLevelLocation = window.location.protocol +"//"+ pathArray[0],
          now = new Date();


      console.warn("sending notification");

      var isAndroid = false;

      if ( device.platform === "Android" ) {
        isAndroid = true;
      }

      cordova.plugin.notification.local.schedule({
          id: 9,
          title: "Test notification 9",
          text: "This is a test notification",
          sound: isAndroid ? "file://sounds/notification.mp3" : "file://sounds/notification.caf",
          at: new Date( new Date().getTime() + 10 )
          // data: { secret:key }
      });

    }

  });

  }, false);

};

现在在您的HTML标签上 -
<button onclick="testNotifications()">Test notification</button>

这应该会触发一个通知或警告您需要权限。另外的提示是确保您的通知位于项目根目录下的文件夹中。对于安卓来说应该是mp3格式,对于iOS来说则是caf格式。


1

答案 1:针对版本3.5.0

请查看插件的plugin.xml。请参考第22行。

    <engine name="cordova" version=">=3.6.0" />

这意味着插件只支持大于3.6.0版本,而您正在使用3.5.0版本。
答案2:适用于5.0或更高版本。
尝试以下代码作为index.html。如果它能完美运行,则将其他选项添加到notification.schedule中。 由于我们没有提供时间(at)选项,因此通知将立即触发。
<html>
<script type="text/javascript" src="cordova.js"></script>
<script>
document.addEventListener('deviceready', onDeviceReady.bind(this), false);
        function onDeviceReady() {                               
            cordova.plugins.notification.local.schedule({
                id: 1,
                title: "Sample Notification",
                text: "foo",                    
                every: "week",                                        
                data: { meetingId: "123#fg8" }
            });
        };
</script>
<body>
</body>
</html>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接