任命者/深空通信链

此软件包已被废弃,不再维护。未建议替代软件包。

一个以复杂方式处理网页推送的软件包。

1.0.8 2017-06-08 11:18 UTC

This package is not auto-updated.

Last update: 2020-04-25 16:29:56 UTC


README

这个库将帮助集成所有必要的模板以支持网页推送通知。主要目标是整合一个优秀的API,通过Safari实现原生macOS推送功能。

其他方法和灵感

一切始于寻找创建Safari *.pushpackages的可行方法。经过数小时搜索,我们决定为此问题构建自己的解决方案。我们从一些项目中获得灵感,主要来自jwage的php-apns。感谢他的工作。

安装

导航到您的项目并运行composer命令

composer require appointer/deep-space-comlink

下一步是注册服务提供者

// config/app.php
'providers' => [
    ...
    \Appointer\DeepSpaceComlink\ComlinkServiceProvider::class,
];

最后,您需要注册此软件包的路由

// app/Providers/RouteServiceProvider.php
public function boot()
{
    parent::boot();

    Appointer\DeepSpaceComlink\DeepSpaceComlink::routes();
}

注意 如果您愿意,您可以发布推送包的配置或模板。这使您能够完全控制图标和应用标题等。使用以下artisan命令

php artisan vendor:publish --provider="Appointer\DeepSpaceComlink\ComlinkServiceProvider" --tag="config"
php artisan vendor:publish --provider="Appointer\DeepSpaceComlink\ComlinkServiceProvider" --tag="pushpackage"

实现JavaScript

不用担心,这很简单。我们以axios为例使用HTTP客户端。如果您有标准的Laravel前端,您可能已经安装了它。您只需要用以下实现替换您当前的本地化数据

// Example is taken from https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/NotificationProgrammingGuideForWebsites/PushNotifications/PushNotifications.html

var p = document.getElementById("foo");
p.onclick = 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/dsc', // 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') {
        // The user said no.
    }
    else if (permissionData.permission === 'granted') {
        // The web service URL is a valid push provider, and the user said yes.
        // permissionData.deviceToken is now available to use.
    }
};

测试

可以使用以下命令执行测试

./vendor/bin/phpunit

贡献

任何帮助都非常受欢迎。您有问题,或者有扩展此项目的绝佳想法吗?请随意发起一个pull request或提交一个问题。

如果您提交一个错误报告,您的问题应包含标题和关于问题的清晰描述。您还应包括尽可能多的相关信息和一个演示问题的代码示例。错误报告的目标是使您和其他人能够轻松复制错误并开发修复方案。

请使用问题跟踪器来报告问题。

许可

此库是开源软件,根据MIT许可协议授权。