javascript - Safari 推送请求权限在 SAFARI 10.0.1 中返回 "denied"

标签 javascript safari push-notification apple-push-notifications macos-sierra

在尝试为我的网站实现 Safari 推送时,我遇到了一个问题:单击按钮后,回调函数返回等于“拒绝”的权限,而没有出现任何弹出窗口。

下面的代码在为 example.com/v1/log 映射的 Controller 上执行

file_put_contents ('./files/log.txt', json_encode ($_REQUEST));

它写'[]';

我在 El capitan OS 上的 Safari 9 中尝试了我的推送,订阅和交付工作正常,所以我不知道 Safari 10 和 Sierra OS 有什么问题。

这是 webpush.js 代码:

const websitePushID = 'web.com.example';
const webServiceUrl = 'https://example.com';
var permissionData = {};

window.addEventListener('load', function () {
    webPush.pushButton = $('.js-push-btn') || false;

    if ('serviceWorker' in navigator) {
        navigator.serviceWorker.register('/service-worker.js').then(webPush.initialiseState);
        $('.js-push-btn').on('click', function () {
            webPush.do();
        });

    } else {
        if ('safari' in window && 'pushNotification' in window.safari) {
            permissionData = window.safari.pushNotification.permission(websitePushID);
            $('.js-push-btn').on('click', function () {
                checkRemotePermission(permissionData);
            });
        }
    }
});

var checkRemotePermission = function (permissionData) {
    if (permissionData.permission === 'default') {
        try {
            console.log('default');
            window.safari.pushNotification.requestPermission(
                webServiceUrl,
                websitePushID,
                {},
                checkRemotePermission
            );
        } catch (e) {
            console.log(e);
        }
    }
    else if (permissionData.permission === 'denied') {
        console.log('denied');
    }
    else if (permissionData.permission === 'granted') {
        console.log('granted');
    }
};

dat 将“默认”和之后的“拒绝”写入控制台日志

最佳答案

首先检查你的签名文件是否使用苹果的全局关系认证机构.cer文件进行签名,该文件从14/2/16起强制执行。可能你遇到了无法提取包之类的错误。通常,如果您使用的是任何框架,则会出现权限错误,不允许 Safari 向您发送日志端点上的日志文件。那是我的问题,当我解决了这两个问题时,我认为 safari 会像魅力一样推送其所有数据!我的建议是先实现日志端点,然后再解决任何错误。

关于javascript - Safari 推送请求权限在 SAFARI 10.0.1 中返回 "denied",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40847250/

相关文章:

javascript - 从 javascript 打开 Bootstrap 模式对话框不起作用

javascript - 构建大型 redux 项目的更好方法是什么?

android - 收到fcm通知后自动启动activity?

javascript - 每次新点击都有新 Action

safari - Safari 中的 CSS border-radius + box-shadow

iframe - 如何修复 ‘The frame being accessed is sandboxed and lacks the "允许同源“标志”

html - 使用单指手势滚动 <object> 元素 - IPAD 不工作

push-notification - 无法注册推送通知(Xcode 7、iOS9)

ios - 如何将 .cer 文件转换为 .pem 文件

javascript - 如何在 React 16 中使用 ReactDOM.createPortal() ?