2016-05-10 60 views
-1

我想通过手机向我的所有用户发送通知。我正在使用GCM和phonegap推送插件。我在数据库中保存了一个registrationId,然后我编写了这2个函数,并使用soap web服务工作。通知不发送。 这是我的代码。功能:发送推送通知给所有用户phonegap

function sendPush($registrationId, $title, $message) { 
    $registrationIds = array(
     $registrationId 
    ); 
    $msg = array(
     'message' => $message, 
     'title' => $title, 
     'vibrate' => 1, 
     'sound' => 1 

     // you can also add images, additionalData 

    ); 
    $fields = array(
     'registration_ids' => $registrationIds, 
     'data' => $msg 
    ); 
    $headers = array(
     'Authorization: key='. 
     'AIzaSyD-sL8HiKyKRWdwxVMmTMYgkqOgVGOiNP8', 
     '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); 
    if ($result === false) die('Curl failed '.curl_error()); 
    curl_close($ch); 
    return $result; 
} 

function push() { 
    $db = new PDO('mysql:host=localhost;dbname=testf', 'root', ''); 
    $sql = "select * from client"; 
    $texte = '<table>'; 

    // $texte=array(); 

    foreach($db - > query($sql) as $data) { 
     $texte = $texte. 
     '#'.$data["regId"]; 
    } 

    $texte = $texte; 
    return $texte; 
} 

电话是:

$client = new nusoap_client('http://localhost/fou/server.php'); 
$title = $_POST['title']; 
$message = $_POST['message']; 
$result = $client->call('push'); 
//echo $result; 
$x = explode("#", $result); 
$nb = count($x); 


for ($i = 0; $i < $v; $i++) { 
    $resp = $client->call('sendPush', array('registrationId' => $x[$i], 'titre' => $title, 'message' => $message)); 
    print_r($resp); 
} 
+0

你会得到一个响应JSON从谷歌在$结果? –

+0

不,我没有得到$结果 – user1674906

+0

的回应,你必须得到一些东西。我可以看到你没有打印或记录$ result.please的值打印/记录它并共享输出。 –

回答

1

尝试这样的:

PushNotification.php

<?php 

    $message = $_REQUEST['msg']; 
    $title = $_REQUEST['title']; 

    $user = "root"; 
    $pass = ""; 

    // Connect 
    $db = new PDO("mysql:host=localhost;dbname=pdo-me", $user, $pass); 
    define('API_ACCESS_KEY', 'AIzaSyD-sL8HiKyKRWdwxVMmTMYgkqOgVGOiNP8'); 

    $msg = array(
     'message' => $message, 
     'title' => $title, 
     'vibrate' => 1, 
     'sound' => 1 
    ); 

    $query = "SELECT regId FROM client"; 
    $stmt = $db->prepare($query); 
    $stmt->execute(); 
    // set array 
    $registrationIds = array(); 


    // look through query 
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
     // add each row returned into an array 
     $registrationIds[] = $row; 
    } 

    $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); 
    print_r($result); 
?> 

并调用php文件从cordova应用,如:

http://yoururl.com/PushNotification.php?msg=test&title=LoremIpsum 

因此,在这种情况下,它将从您的表中检索所有registrationId,并且它将向所有设备发送通知。

编辑1:

使用此代码在您的应用程序。

//Getting value of title textbox 
var title = document.getElementById('title').value; 
//Getting value of message textbox 
var message = document.getElementById('message').value; 
$.ajax({ 
    type:'POST', 
    url: 'http://yoururl.com/PushNotification.php?title='+title+'&msg='+message, 
    success: function(data){ 
     alert("Success: " + data); 
    }, 
    error:function(jqXHR, textStatus, errorThrown){ 
     alert("Error"); 
    } 
}); 
+0

我有一个表单来编写消息和标题,我编辑你的代码。我删除了第一行。我写了“$ query =”SELECT regId FROM client“; $ stmt = $ db-> prepare($ sql); $ stmt-> execute(); //设置数组 $ registrationIds =阵列(); //期待通过查询 而($行= $ stmt->取(PDO :: FETCH_ASSOC)){// 添加每一行返回到一个数组 $ registrationIds [] = $行; ('title'=> $ title,'message'=> $ message))“ \t echo $ var;”我有一个意想不到的错误'echo' – user1674906

+0

你可以在http://pastebin.com/上发布你的完整代码吗? – Dhruv

+0

这是我的代码:http://pastebin.com/fsmNV598 – user1674906