Cordova Phonegap 本地通知不起作用

Cordova Phonegap local notifications not working

首先我想说这是一个非常好的插件 (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" />

但是通知不会出现 - phone 上什么也没有发生 - 什么都没有,nada,zilch。我还下载了 KitchenSink 应用程序 (https://github.com/katzer/cordova-plugin-local-notifications/tree/example) 并安装在 Phonegap 构建和我的 phone 上,但没有任何反应..

这是我在 index.html 上的代码,所以当 phone 触发时,它应该尽快注册一个本地通知:

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

甚至 KitchenSink 应用程序也无法运行 - phone 上没有任何反应??

我的Android版本是:5.1.1

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

答案 1 :for version 3.5.0

看看plugin's plugin.xml。见第 22 行

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

这意味着插件只支持大于 3.6.0 的版本,而您使用的是 3.5.0

答案 2 :for version 5.0 or higher

尝试以下代码作为 index.html。如果它运行完美,那么 notification.schedule 中的其他选项。 因为我们没有提供 time(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>

我也花了很多时间试图让这个插件工作而且我已经做到了,但我确实发现它是最喜怒无常的插件之一。

在你的 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>

这应该会触发通知或警告您它需要权限 最重要的提示是确保您的通知位于项目根目录的文件夹中。 android 应该是 mp3 和 ios caf