使用PHP的Google云消息传递(GCM)

时间:2016-09-15 07:59:53

标签: javascript php push-notification google-cloud-messaging service-worker

我试图找出使用PHP发送推送通知的方法。 问题是,如何在浏览器中注册服务工作者并直接从PHP发送通知。

我得到了后端部分的代码示例:

    <?php
        define( 'API_ACCESS_KEY', 'SOME KEY' );
        $registrationIds = array('fK_LVMivilI:APA91bHCXawEoNXc0Avwk4F6iYsshn4mmWX6jysrg8gC9PGA6_AlqWtr1HXhIMonCCUj8syOlsDGTFJVu_T3aPqdMNynqy7SY5L9OBlgolu-7L2a5pwZrB7kN_bdnUPeZHJQ1HT2i2ed');
        $msg = array
        (
            'message'   => 'here is a message. message',
            'title'     => 'This is a title. title',
            'subtitle'  => 'This is a subtitle. subtitle',
            'tickerText'    => 'Ticker text here...Ticker text here...Ticker text here',
            'vibrate'   => 1,
            'sound'     => 1,
            'largeIcon' => 'large_icon',
            'smallIcon' => 'small_icon'
        );
        $fields = array
        (
            'registration_ids'  => $registrationIds,
            'data'          => $msg
        );

        $headers = array
        (
            'Authorization: key=' . API_ACCESS_KEY,
            'Content-Type: application/json'
        );

        $ch = curl_init();
        curl_setopt( $ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send' );
        curl_setopt( $ch,CURLOPT_POST, true );
        curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
        curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
        curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
        curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
        $result = curl_exec($ch );
        curl_close( $ch );
        echo $result;

当我尝试运行此脚本时,我收到以下错误:

{"multicast_id":7003820144951503575,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"NotRegistered"}]}

我想是的,因为浏览器中没有注册服务工作者。

所以,我需要一些解决方案,如果需要,使用PHP和javascript发送动态内容通知。

任何建议都适用。

1 个答案:

答案 0 :(得分:1)

检查此documentation,了解如何在实施推送消息传递时注册服务工作者。这里陈述了让服务工作者为Web实现推送消息的依赖性。这样做的原因是,当收到推送消息时,浏览器可以启动服务工作者,该服务工作者在后台运行而不打开页面,并调度事件以便您可以决定如何处理该推送消息。 / p>

这是用于此的示例代码。

var isPushEnabled = false;

…

window.addEventListener('load', function() { 
var pushButton = document.querySelector('.js-push-button'); 
pushButton.addEventListener('click', function() { 
if (isPushEnabled) { 
unsubscribe(); 
} else { 
subscribe(); 
} 
});

// Check that service workers are supported, if so, progressively 
// enhance and add push messaging support, otherwise continue without it. 
if ('serviceWorker' in navigator) { 
navigator.serviceWorker.register('/service-worker.js') 
.then(initialiseState); 
} else { 
console.warn('Service workers aren\'t supported in this browser.'); 
} 
});

有关Service Worker的更多信息,请查看本教程: