OneSignal Wordpress 通知未在 App 中打开

OneSignal Wordpress Notifications not opening in App

我正在努力为我的 Cordova 本机应用程序寻找解决方案。

我正在使用 OneSignal 在新文章发布后发送推送通知。推送通知工作正常,但当我点击通知时,打开的是普通浏览器,而不是应用程序。

注意:当我通过 OneSignal 发送测试通知并单击它时,应用程序打开。 我的代码只是不想处理 Wordpress 文章。

这是我在 index.js

中使用的代码
document.addEventListener('deviceready', function () {
  // Enable to debug issues.
  // window.plugins.OneSignal.setLogLevel({logLevel: 4, visualLevel: 4});

var notificationOpenedCallback = function(jsonData) {
  var additionalData = jsonData.notification.payload.additionalData
  if (additionalData && additionalData.myKey)
    // Not familiar with Cordova, $state may or may not be available here
    $state.go('app.post', {'postId': + additionalData.myKey});
};

  window.plugins.OneSignal
    .startInit("0b8b7e69-1649-4616-XXXXXXX")
    .handleNotificationOpened(notificationOpenedCallback)
    .endInit();

  // Call syncHashedEmail anywhere in your app if you have the user's email.
  // This improves the effectiveness of OneSignal's "best-time" notification scheduling feature.
  // window.plugins.OneSignal.syncHashedEmail(userEmail);
}, false);

有人知道我的代码可能有什么问题吗?

您需要将所有代码放在设备就绪功能的插件检查下,并确保将数据解析为数组对象,因为它们发送原始数据看起来像 -

if (window.plugins && window.plugins.OneSignal) {
    .startInit(your_appid, your_google_project)
    .inFocusDisplaying(window.plugins.OneSignal.OSInFocusDisplayOption.Notification)
    .handleNotificationOpened(function(jsonData) {
        if (device.platform =="Android") {
            var addData = JSON.parse(jsonData.result.notification.payload.additionalData);
        } else {
            var addData = jsonData.result.notification.payload.additionalData;
        }
        if (addData != undefined) {
            if (addData.posts != undefined) {
                var postID = Number(addData.posts);
                $state.go('app.post', {postId: postID });
            }
        }
    })
    .endInit();
}

注意:根据那里的文档,他们将附加数据树更新为

result.notification.payload.additionalData

不是notification.payload.additionalData

将此功能放在您的 wordpress 主题上 function.php 并确保您已禁用该选项 "Send notifications additionally to iOS & Android platforms"。在 WordPress 插件页面上。

add_filter('onesignal_send_notification', 'onesignal_send_notification_filter', 10, 4);

function onesignal_send_notification_filter($fields, $new_status, $old_status, $post)
{
    $postID = $post->id;
    $fields['isAndroid'] = true;
    $fields['isIos'] = true;
    $fields['isAnyWeb'] = false;
    $fields['isChrome'] = false;
    $fields['data'] = array(
       "posts" => $postID
   );
   return $fields;
}

就把它留在这里,以防其他人可以使用它。

add_filter('onesignal_send_notification', 'onesignal_send_notication_filter_push', 10, 4);

function onesignal_send_notication_filter_push($fields, $new_status, $old_status, $post)
{
    $fields['isAndroid'] = true;
    $fields['isIos'] = true;
    $fields['isAnyWeb'] = false;
    $fields['isChrome'] = false;
    // overwrite http url with app_url so push notifications opens app instead of phone browser. 
    $fields['url'] = $fields['app_url'];

    return $fields;
}