สอบถามปัญหา Push Notification ครับ

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา สอบถามปัญหา Push Notification ครับ

สอบถามปัญหา Push Notification ครับ
พี่นิกคับ
 
ผมทำตามที่ที่ได้โพส เรื่อง push notification ครับ
 
พอรันแล้วไม่มีอะไรเกิดขึ้นคับ
 
ทำถึงขั้นตอนสุดท้ายแล้ว
 
 
วิธีการทำสอบ ก็ให้อัพไฟล์นี้ขึ้น server แล้วกด รีเฟรส หร็อ รันไฟล์ 
ถ้าไม่มีข้อผิดพลาด ก็ จะได้รับข้อความเป็น push notification ที่เครื่องมือถือของเรา
เท่าที่รู้ เราสามารถส่งได้พร้อมกันสูงสุด 1000 regid
 
 
แต่ผลลัพที่ได้หน้าบราวเซอร์เป็นแบบนี้ครับ
 
 
Warning: json_encode() expects exactly 1 parameter, 2 given in C:AppServwwwstd_project54231_416pusher.php on line 71
JSON_PARSING_ERROR: Unexpected token END OF FILE at position 0.
 
 
 
ผมใส่ key ตามที่ได้สมัคร GCM แล้วครับ แต่ก้อยังไม่ได้
 
ไม่ทราบว่าพี่พอจะมีวิธีแก้ไขไหมครับ
 
ขอบคุณครับ


Natjadee 110.164.182.xxx 02-12-2014 16:02:46

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 11
โค้ดก็ถูกหมดน่ะ  ลองเอาค่ามา regid มาใส่ตรงตามความเห็นที่ 8 ดู 
อาจะเป็นไปได้ไหม ที่ server ไม่รองรับ curl ฟังก์ชั่น


ninenik 1.47.17.xxx 03-12-2014
 ความคิดเห็นที่ 12
ผมเอาค่า regid จากฐานข้อมูลที่มันเก็บ

แล้วเทียบกับบนเครื่องที่มันแสดงอยู่ ก้อตรงกันน่ะครับ

ผลที่ได้ก้อเกิดอาการเดิมครับ


<?php
header("Content-type:text/html; charset=UTF-8");            
header("Cache-Control: no-store, no-cache, must-revalidate");         
header("Cache-Control: post-check=0, pre-check=0", false);      
// ส่วนตั้งค่าการใช้งาน push
include("pusher.php");
$apiKey = "***************************************";  // ค่าา api key จาก phonegap ตอนที่ 9 Key for browser applications
$pusher = new Pusher($apiKey);


$regId=array("**********************************"); // ใส่ regid จากในฐานข้อมูล


// prep the bundle
$msg = array
(
    'message'   => 'ทดสอบ',
    'title'     => 'Push',
);
$pusher->notify($regId, $msg);
 echo "<pre>";
print_r($pusher->getOutputAsArray());
echo "</pre>";
?>


Warning: json_encode() expects exactly 1 parameter, 2 given in C:AppServwwwstd_project54231_416pusher.php on line 71
JSON_PARSING_ERROR: Unexpected token END OF FILE at position 0.



Natjadee 110.164.182.xxx 03-12-2014 00:11
 ความคิดเห็นที่ 13
C:AppServwwwstd_project54231_416pusher.php on line 71

ผลที่เอามาวาง นี้จากของจริง หรือก็อบปจากด้านล่าง
เพราะถ้าจากของจริง ทำไม path ถึงเป้น drive C ซึ่งเแสดงว่ารันที่เครื่อง 

เอา url ที่เรารันไฟล์มาโชว์ด้วยดู

ตามที่ทดสอบในเว็บ ก็เช่น https://www.ninenik.com/test_push.php ประมาณนี้
ของเรา ใช้ประมาณไหน ลองเอามาวางดู ไม่ต้องวางหมด เปลี่ยนค่าที่เป็นเฉพาะเป็น xxx แทนได้


ninenik 1.47.17.xxx 03-12-2014
 ความคิดเห็นที่ 14
http://ict.sci.psu.ac.th/std_project/54/231_416/test_push.php


index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">    
    <title>Push</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
</head>
<body>
  
<br><br>      
<div class="container-fluid">

<pre>
    <div id="home">
        <div id="app-status-div">
            <ul id="app-status-ul">
                <li>Cordova PushNotification Plugin Demo</li>
            </ul>
        </div>
    </div>
</pre>

</div>    
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>    
<script src="http://momentjs.com/downloads/moment.min.js"></script>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript">
$(function(){

});
</script>     
<script type="text/javascript">
    var pushNotification;
    var php_addRegist="http://ict.sci.psu.ac.th/std_project/54/231_416/add_regist.php";  // path ไฟล์ 

    function onDeviceReady() {  //ฟังก์ชั่นทำงานเมื่อเครื่องพร้อม
        var data_uid=device.uuid; // เก็บค่า uid 
        // แสดงข้อความถึง event ที่เกิดขึ้น  ส่วนนี้ ใช้งานจริง สามารถลบออกได้
        $("#app-status-ul").append('<li>deviceready event received</li>');
        $("#app-status-ul").append('<li>UID'+data_uid+'</li>');  // แสดงค่า uid

        // ส่วนนี้ไม่เกี่ยวโดยตรงสักเท่าไหร่ แต่ประยุกต์ได้ เป็น event เมื่อกดปุ่ม back ที่เครื่อง
        document.addEventListener("backbutton", function(e){
            $("#app-status-ul").append('<li>backbutton event received</li>');
            // ถ้าหน้านี้มี div id เท่ากับ home แล้วถ้ากดปุ่ม back ให้ทำอะไร
            if( $("#home").length > 0){
                // ใน commnet ด้านล่าง เขาแนะนำว่า เราอาจจะยกเลือกการ register เมื่อ
                // เกิดขึ้นในกรณีตามกล่าวข้างต้น
                // call this to get a new token each time. don't call it to reuse existing token.
                //pushNotification.unregister(successHandler, errorHandler);
                e.preventDefault();
                navigator.app.exitApp(); //ปิด app ถ้าอยู่หน้า home
            }else{
                navigator.app.backHistory();  // ย้อนกลับแบบปกติ ถ้าอยู่หน้าอื่น
            }
        }, false);

        try{   // เรียกใช้งาน plugin push
            pushNotification = window.plugins.pushNotification;
            $("#app-status-ul").append('<li>registering ' + device.platform + '</li>');
            
            if(device.platform == 'android' || device.platform == 'Android' ||
                    device.platform == 'amazon-fireos' ) {
                    pushNotification.register(successHandler, errorHandler, {  // ทำการลง register 
                        "senderID":"287041799426",    // เปลี่ยนเป็นค่า project name จาก phonegap ตอนที่ 9
                        "ecb":"onNotification"
                    });		// required!
            }
        }catch(err){  // กรณีเกิดข้อผิดพลาด
            txt="There was an error on this page.nn"; 
            txt+="Error description: " + err.message + "nn"; 
            alert(txt); 
        } 
    }

    // จัดการกับข้อ GCM notifications สำหรับ Android
    function onNotification(e) {
        // แสดงสถานะ ใช้งานจริง ตรงนี่ิตัดออกได้ 
        $("#app-status-ul").append('<li>EVENT -> RECEIVED:' + e.event + '</li>');

        switch( e.event ){  // การทำงานกับเงื่อนไขเหตุการณ์ที่เกิดขึ้น
            case 'registered':  // มีมีการ registered
                if( e.regid.length > 0 ){  // มีค่า regid
                    // ข้อความแสดงสถานะการทำงาน ใช้งานจริง ตรงนี่ิตัดออกได้ 
                    $("#app-status-ul").append('<li>REGISTERED -> REGID:' + e.regid + "</li>");

                    // ทดสอบดูค่า regiid ใช้งานจริงปรับได้ตามต้องการ
                    console.log("regID = " + e.regid);
                    
                    // ส่งค่า regid และ uid ไปบันทึกไว้บน server
                    $.post(php_addRegist,{

                        uid:device.uuid, // คล้าย id เครื่องเรา
                        regid:e.regid,
                        datetime:moment().format('YYYY-MM-DD HH:mm:ss')
                    },function(data){
                        alert(data); // ทำงานตามต้องการ ในที่นี้ทดสอบ ให้ alert ค่าที่ได้จากไฟล์ add_regist.php
                    });
                }
                break;
            case 'message':  // เมื่อได้รับข้อความ push
                // ถ้าเราเปิด app อยู่ หมายถึง กำลังใช้งาน app จะให้ทำอย่างไร
                if (e.foreground){
                    // ใสคำสั่งส่วนนี้ตามต้องการ  ในตัวอย่าง เขาจะบอกแค่สถานะว่า เป็นการแจ้งแบบ inline
                    $("#app-status-ul").append('<li>--INLINE NOTIFICATION--' + '</li>');
                    
                }else{ // กรณีอื่นๆ หรือก็คือ เมื่อมี push มา
                    
                    if(e.coldstart){ // แล้วเรากดที่ ข้อความ push ด้านบน
                        // ก็จะเข้ามาทำงานในส่วนนี้ กำหนดตามต้องการ
                        $("#app-status-ul").append('<li>--COLDSTART NOTIFICATION--' + '</li>');
                    }else{
                        // กรณีอื่นๆ เช่น ทำงานแบบ background
                        $("#app-status-ul").append('<li>--BACKGROUND NOTIFICATION--' + '</li>');
                    }
                }

                // แสดงข้อความ e.payload.message คือค่าข้อความทีเราได้ เราสามารถส่งตัวแปร อื่นๆ ตามต้องการได้
                // ส่วนนี้ทำงานเม่อได้รับข้อความ push
                $("#app-status-ul").append('<li>MESSAGE -> MSG: ' + e.payload.message + '</li>');
                break;
            case 'error':  // กรณี error
                $("#app-status-ul").append('<li>ERROR -> MSG:' + e.msg + '</li>');
                break;
            default:  // อื่นๆ 
                $("#app-status-ul").append('<li>EVENT -> Unknown, an event was received and we do not know what it is</li>');
            break;
        }
    }

    // ฟังก์ชั่นเมื่อ process สำเร็จ  
    function successHandler (result) {      
        // เวลาใช้งานจริง บรทดัต่อจากนี้สามารถตัดออกได้ หรือใช้กำหนดค่าอื่นตามต้องการได้
        $("#app-status-ul").append('<li>success:'+ result +'</li>');
    }
// ฟังก์ชั่นเมื่อ process เกิดข้อผิดพลาด 
    function errorHandler (error) {
        // เวลาใช้งานจริง บรทดัต่อจากนี้สามารถตัดออกได้ หรือใช้กำหนดค่าอื่นตามต้องการได้
        $("#app-status-ul").append('<li>error:'+ error +'</li>');
    }

    // ให้ไปทำงานฟังก์ชัน onDeviceReady เมือ cordova โหลดเรียบร้อยแล้ว
    document.addEventListener('deviceready', onDeviceReady, true);

 </script>  
</body>
</html>

add_regist.php

<?php
header("Content-type:text/html; charset=UTF-8");            
header("Cache-Control: no-store, no-cache, must-revalidate");         
header("Cache-Control: post-check=0, pre-check=0", false);      
// เชื่อมต่อกับฐานข้อมูล      
$link=mysql_connect("**************","**************","**************"); // เชื่อมต่อ Server        
mysql_select_db("**************");  // ติดต่อฐานข้อมูล        
mysql_query("set character set utf8"); // กำหนดค่า character set ที่จะใช้แสดงผล   
if(isset($_POST['uid']) && $_POST['uid']!="" && isset($_POST['regid']) && $_POST['regid']!=""){
	$id_reg=@mysql_result(@mysql_query("
	SELECT id FROM regid WHERE uid='".$_POST['uid']."'
	"),0,0);
	if($id_reg>0){
		@mysql_query("
		UPDATE regid SET
		val='".$_POST['regid']."',
		datetime_update=''".$_POST['datetime']."' 
		WHERE uid='".$_POST['uid']."'
		");
		echo 2;
	}else{
		@mysql_query("
		INSERT INTO regid(
			id,val,uid,datetime_add,datetime_update,regist
		)VALUES(
			NULL,'".$_POST['regid']."','".$_POST['uid']."','".$_POST['datetime']."','".$_POST['datetime']."','1'
		)
		");
		echo 1;
	}
}else{
	echo 0;	
}
?>


Natjadee 110.164.182.xxx 03-12-2014 09:02
 ความคิดเห็นที่ 15
ลองสร้างไฟล์เปล่า แล้วใส่โค้ด

<?
phpinfo();
?>


รันดูว่า สามารถใช้งาน curl ได้ไหม

เช็คถ้าแบบด้านล่าง แสดงว่าน่าจะใช้ curl ได้ ต้องหาสาเหตุอื่นต่อ

curl

cURL support enabled
cURL Information libcurl/7.16.0 OpenSSL/0.9.8g zlib/1.2.3
 


ninenik 171.96.17.xxx 03-12-2014
 ความคิดเห็นที่ 16
serอer ก้อ enable ให้แล้วน่ะครับ



Natjadee 110.164.182.xxx 03-12-2014 10:41
 ความคิดเห็นที่ 17
  แปลกมาก 555 น่าจะมีอะไรผิด เอาไฟล์ test_push ที่มีค่า จริง ทั้ง api key และก็ regid  
ที่บันทึก ส่งเข้าเมลล์ ninenik@gmail.com มาดู


ninenik 171.96.17.xxx 03-12-2014
 ความคิดเห็นที่ 18
Array
(
    [0] => APA91bEi9BaALk1JTYidhD-fVITcIDWJZb2E4bmLBRr6RNpISRpqiVccICgQmyBjxN7fJpwaZpZ7Veuasw4MP0mHjzZnPS6nlTKG9Zs7nvJgt8OSZ7B9PhbxRXLW4m-FadzObpgyBn1egyvqTQg82CKfaj9bAnjRJQ
)
Array
(
    [multicast_id] => 6484845527708779443
    [success] => 0
    [failure] => 1
    [canonical_ids] => 0
    [results] => Array
        (
            [0] => Array
                (
                    [error] => NotRegistered
                )

        )

)

ถ้ามันมาแบบนี้ แปลว่าอะไรคับพี่


mal2321 180.183.24.xxx 18-06-2015 12:08
 ความคิดเห็นที่ 19
แปลกว่าส่งไม่สำเร็จ success 0

ลองไล่ดู หรือหาเครื่องทดสอบ อาจจะเป็นมือถือจริงๆ  



ลองทดสอบที่เครื่องขึ้นว่า registered ตามรูปด้านบน


ภาคต่อ สร้าง app ใช้งาน Push Notifications ใน phonegap ตอนที่ 10 


ninenik 180.183.40.xxx 18-06-2015
 ความคิดเห็นที่ 20
ได้แล้วคับ ขอบคุณมากคับ


mal2321 180.183.173.xxx 01-07-2015 14:30






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ