-->

Php: Create web push notification

2019-09-19 11:05发布

问题:

I want to create a web push notification in Php but I don't have the exact procedure for it. Following is the code I found, but it is not working.

  <?php
   require __DIR__ . '/../vendor/autoload.php';    
   use Minishlink\WebPush\WebPush;



    $subscription = json_decode(file_get_contents('php://input'), true);

    $auth = array(
   'VAPID' => array(
    'subject' => '`enter code here`',
    'publicKey' => '**********',
    'privateKey' => '***********',
   ),
 );

    $webPush = new WebPush($auth);

    $res = $webPush->sendNotification(
    $subscription['endpoint'],
    "Hello!",
     $subscription['key'],
     $subscription['token'],
     true
   );

Please suggest the correct steps.

回答1:

I spent some time my self figuring this out. I'm posting the code as it works for me. Generate the keys from here https://web-push-codelab.glitch.me/

<?php

require_once './vendor/autoload.php';

use Minishlink\WebPush\WebPush;


// array of notifications
$notifications = array(
 array(
        'endpoint' => 'https://fcm.googleapis.com/fcm/send/abcd........', // Chrome
        'payload' => 'Hello',
        'userPublicKey' => 'BFHh..........',
        'userAuthToken' => 'DI............',
    )
);

$auth = array(
    'GCM' => 'AAAAKTK8bp4..............', // deprecated and optional, it's here only for compatibility reasons
    'VAPID' => array(
        'subject' => 'Some Text', // can be a mailto: or your website address
        'publicKey' => 'BGsm2vrV2AMpT.............', // (recommended) uncompressed public key P-256 encoded in Base64-URL
        'privateKey' => 'a89H............', // (recommended) in fact the secret multiplier of the private key encoded in Base64-URL

    ),
);

$defaultOptions = array(
    'TTL' => 300, // defaults to 4 weeks
    'urgency' => 'normal', // protocol defaults to "normal"
    'topic' => 'push', // not defined by default - collapse_key
);

$webPush = new WebPush($auth, $defaultOptions);

$vr = $webPush->sendNotification(
    $notifications[0]['endpoint'],
    $notifications[0]['payload'], // optional (defaults null)
    $notifications[0]['userPublicKey'], // optional (defaults null)
    $notifications[0]['userAuthToken'], // optional (defaults null)
    true // optional (defaults false)
);