【问题标题】:Windows Phone 8 Receiving raw Push Notification issueWindows Phone 8 接收原始推送通知问题
【发布时间】:2016-02-15 07:07:14
【问题描述】:

我无法在我的 WindowsPhone8 上接收原始通知。

已关注:https://github.com/barryvdh/PushPlugin/#uccb-wp8-only

能够收到 toast 通知。在我的应用中,切换发生如下。

案例 1:如果我评论 ecb 能够同时获得生吃和吐司,但不能 频道 uri。

案例 2:如果我不评论 ecb 能够获取 toast 和频道 uri 但 不是生的

我的代码如下:

if (device.platform == "Win32NT") {
        console.log("called");

            pushNotification.register(
                channelHandler,
                errorHandler,
                {
                    "channelName": "channelName",
                    "ecb": onNotificationWP8,
                    "uccb": channelHandler,
                    "errcb": jsonErrorHandler
                });
        }
        else {
            console.log("not called");
        }
    }


function channelHandler(event) {
    var uri = event.uri;
    console.log("UUUUURRRRRRRRRRRIIIIIIIII  :" + uri);
}

function errorHandler(e) {
}

function jsonErrorHandler(error) {
    $("#app-status-ul").append('<li style="color:red;">error:' + error.code + '</li>');
    $("#app-status-ul").append('<li style="color:red;">error:' + error.message + '</li>');
}

function onNotificationWP8(e) {
    console.log("notification called");
    if (e.type == "toast" && e.jsonContent){
        pushNotification.showToastNotification(successHandler, errorHandler,
        {
            "Title": e.jsonContent["wp:Text1"], "Subtitle": e.jsonContent["wp:Text2"], "NavigationUri": e.jsonContent["wp:Param"]
        });
    }

    if (e.type == "raw" && e.jsonContent) {
        alert(e.jsonContent.Body);
    }
}

尝试了错误和跟踪方法。请提出可能出了什么问题。

【问题讨论】:

  • 看起来您正在尝试使用自定义插件进行推送并注意到问题。您是否发现使用开箱即用推送功能的 Worklight/MobileFirst 项目存在问题?
  • 我正在使用 Worklight 版本 6.1.0.02-20151114-1310
  • 发布的问题与 Worklight 有什么关系?尽管 Worklight 提供了开箱即用的推送通知支持,但您使用的是自定义插件。如果您在这里使用示例:public.dhe.ibm.com/software/mobile-solutions/worklight/docs/… 并且不添加任何自定义插件,您可以获得原始通知吗?
  • 我没有收到原始通知,但能够获得敬酒。我使用了自定义插件,因为我的要求只是让通道 uri 将其发送到后端并在客户端处理收到的通知。我不想使用任何适配器。如果 worklight 能在没有任何 ifix 的情况下帮助我,那就太好了。您分享的上述链接包含android环境,实际上我期待的是windows环境。
  • 添加WindowsPhone环境

标签: windows-phone-8 push-notification ibm-mobilefirst mpns


【解决方案1】:

观察到的问题似乎与 Worklight 完全无关。从描述和代码 sn-p 来看,您完全绕过了 Worklight 客户端 SDK 和服务器,并使用了自定义 Cordova Push 插件。应分析自定义插件在您的应用程序中的工作情况,以了解行为差异。

由于您根本没有使用 Worklight Push,您可以尝试禁用它并检查这是否对您的情况有帮助。

为此,导航到 config.xml 。这将位于 apps/YourAppName/WindowsPhone8/native/Resources 文件夹中。

寻找:

<feature name="Push">
    <param name="wp-package" value="Push" />
</feature>

将其更改为:

<feature name="Push">
    <param name="wp-package" value="Push" />
    <param name="onload" value="false" />
</feature>

关于 Worklight API 的查询:

没有返回通道 URI 的 Worklight API。使用 Worklight SDK for Push 时,所有这些都是自动完成的,并且对用户隐藏。即使使用了 Push Adapter,也无法获取通道 URI,因为没有发布 API 来获取此信息。

【讨论】:

  • 谢谢维文。不幸的是,禁用 Worklight Push 对我没有帮助。你是对的。 Worklight 并没有阻止我。需要弄清楚自定义插件出了什么问题。
【解决方案2】:

最后通过添加 Coding4Fun.Toolkit.Controls.dll 解决了

以及 PushPlugin.cs 中的一些代码更新

使用 Coding4Fun.Toolkit.Controls; 使用 System.Windows.Threading;

void PushChannel_ShellToastNotificationReceived(object sender, NotificationEventArgs e) {

        Deployment.Current.Dispatcher.BeginInvoke(() =>
        {
            string msg = string.Empty;
            foreach (var item in e.Collection)
            {
                if (item.Key == "wp:Text1")
                {
                    msg = item.Value;
                }
            }

            MessageBox.Show(msg, "Notification", MessageBoxButton.OK);

        });
    }

我衷心感谢帮助我实现这一目标的 Rajith。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多