Safari推送通知(OS X Mavericks和Safari 7)

时间:2014-04-11 08:50:04

标签: safari notifications push safari-push-notifications

我创建了带有效证书的推送包,并在服务器上托管了有效的SSL证书,但问题是javascript总是在提示给用户之前显示被拒绝的消息。 我正在使用Apple教程中的java脚本代码和有效的网站推送ID& webservice 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.

    }

};

问题在于我被拒绝了#39;我的javascript中提醒,因为权限被拒绝。事情是它从未被问过,也从未被问过。它甚至不在我的旅行者偏好中。

为什么safari会在没有询问的情况下被拒绝?

2 个答案:

答案 0 :(得分:0)

您能否确认网站推送ID和您指定的网络服务网址是否有效?如果它不是有效的服务URL或网站推送ID,Safari将在没有提示的情况下拒绝它。

我实施了safari推送端到端,你要注意的一些事情是..

  1. Web服务URL受https保护,主机名与所用证书的CN匹配。另外,请确保它是经过验证的证书。
  2. 网站推送ID有效,并通过Developer Portal注册。
  3. 任何签名错误都会在Web服务上发布,记录结束点。因此,在尝试下载推送包之前,您可能希望启动并运行该端点。
  4. 此外,我注意到Apple没有为Safari Push提供沙箱环境。这意味着您需要注册一个用于生产的网站推送ID和一个用于预生产的网站推送ID,以便您可以将它们分开用于测试目的。

    希望有所帮助。

答案 1 :(得分:0)

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

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

  2. webServiceURL /版本/设备/ deviceToken /注册/ websitePushID - 当用户授予许可或稍后更新其许可时 级别,发送POST请求。当用户删除权限时 推送通知,发送DELETE请求。

  3. webServiceURL / version / log - 当POST请求发生错误时 对此端点做了

  4. 我建议您分一句github repo,它包含非常好的文档,可以使用.htaccess文件定义这些服务器端端点。