【问题标题】:Safari push notification (OS X Mavericks and Safari 7)Safari 推送通知(OS X Mavericks 和 Safari 7)
【发布时间】:2014-05-25 07:47:05
【问题描述】:

我已经创建了带有有效证书的推送包,并使用有效的 SSL 证书托管在服务器上,但问题是 javascript 总是在提示用户之前显示被拒绝的消息。 我正在使用来自 Apple 教程的 Java 脚本代码以及有效的网站推送 ID 和 Web 服务 URL 等

document.body.onload = function() {

    // Ensure that the user can receive Safari Push Notifications.

    if ('safari' in window && 'pushNotification' in window.safari) {

        var permissionData = window.safari.pushNotification.permission('web.com.example.domain');

        checkRemotePermission(permissionData);

    }

};


var checkRemotePermission = function (permissionData) {

    if (permissionData.permission === 'default') {

        // This is a new web service URL and its validity is unknown.

        window.safari.pushNotification.requestPermission(

            'https://domain.example.com', // The web service URL.

            'web.com.example.domain',     // The Website Push ID.

            {}, // Data that you choose to send to your server to help you identify the user.
            checkRemotePermission         // The callback function.
        );
    }

    else if (permissionData.permission === 'denied') {

alert('denied');        
// The user said no.

    }

    else if (permissionData.permission === 'granted') {
alert('granted'); 

        // The web service URL is a valid push provider, and the user said yes.

        // permissionData.deviceToken is now available to use.

    }

};

问题是我在我的 javascript 中收到“拒绝”警报,因为权限被拒绝。问题是它从来没有问过,也从来没有问过。它甚至不在我的 Safari 偏好中。

为什么不问就拒绝 safari 返回?

【问题讨论】:

  • 在您的服务器上安装一个用于日志记录的处理程序也是一个好主意,Safari 会将其遇到的任何错误的详细信息发送回此错误端点,例如错误的证书、错误的包等。

标签: safari notifications push safari-push-notifications


【解决方案1】:

您需要定义以下服务器端端点

  1. webServiceURL/version/pushPackages/websitePushID –
    的位置 推送包,由 POST 请求请求。

  2. webServiceURL/version/devices/deviceToken/registrations/websitePushID – 当用户授予权限或稍后更新他的权限时
    级别,发送一个 POST 请求。当用户删除权限时 推送通知,发送删除请求。

  3. webServiceURL/version/log – 发生错误时,POST 请求 到这个端点

我建议你 fork 这个github repo,它包含非常好的文档,并且可以使用 .htaccess 文件定义这些服务器端端点。

【讨论】:

    【解决方案2】:

    您能否确认您指定的网站推送 id 和 Web 服务 URL 有效且存在?如果不是有效的服务 url 或网站推送 id,Safari 会在不提示的情况下拒绝。

    我实现了 safari 端到端推送,你应该注意的一些事情是..

    1. Web 服务 URL 受 https 保护,主机名与所用证书的 CN 匹配。另请确保它是经过验证的证书。
    2. 网站推送 ID 有效,通过开发者门户注册。
    3. 任何签名错误都会在 Web 服务日志记录端点发布。因此,您可能希望在尝试下载推送包之前启动并运行该端点。

    我还注意到 Apple 没有为 Safari Push 提供沙盒环境。这意味着您需要注册一个用于生产的网站推送 ID,以及一个用于预生产的网站推送 ID,以便您可以将它们分开以进行测试。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多