【问题标题】:Cordova Phonegap local notifications not workingCordova Phonegap 本地通知不起作用
【发布时间】:2016-03-30 14:54:21
【问题描述】:

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

但是通知没有出现 - 手机上没有任何反应 - 没有,nada,zilch。我还下载了 KitchenSink 应用程序 (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"
});

即使是 KitchenSink 应用程序也无法运行 - 手机上没有任何反应??

我的安卓版本是:5.1.1

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

【问题讨论】:

  • 您是否验证了 deviceready 事件已触发?
  • 是的,应用程序对此作出响应。我已经在 Phonegap 构建和在手机上制作 .apk 中完成了 console.log 和各种其他测试 - 厨房水槽应用程序也无法正常工作
  • @TheBlackBenzKid 嗨,我正在尝试使用 kitchensink 应用程序。明天会告诉你。但我在下载示例代码时注意到的一件事是插件文件夹没有被正确提取。我无法在插件中找到“de.appplant.cordova.plugin.local-notification”文件夹。我只能看到 1kb 大小的“de.appplant.cordova.plugin.local-notification”文件。那么,您能否通过检查您的插件文件夹中的插件来确认您的插件已正确安装?
  • @TheBlackBenzKid 有什么更新吗?你成功了吗?
  • 你最近怎么样?通知应该只在应用程序处于后台时出现,并且您可能正在前台进行测试。

标签: android cordova phonegap-plugins phonegap-build


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    答案 1:适用于 3.5.0 版

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

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

    这意味着插件只支持大于 3.6.0 的版本并且你使用的是 3.5.0

    答案 2:适用于 5.0 或更高版本

    尝试以下代码作为 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>
    

    【讨论】:

      猜你喜欢
      • 2017-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多