본문 바로가기

안드로이드

php를 이용한 gcm 푸시 예제[2]

3. db에 저장된 RegistrationId값을 이용해 gcm 메시지를 전송해줍니다.(간단한 폼을 만들었고 내용입력 후 메시지보내기를 클릭하면 폰으로 푸시메시지가 전송됩니다. 


---------------------------------------------------------------------------------------------------------

push전송하는 php : gcm_send_message.php



<HTML>

<HEAD>

<TITLE>GuestBook</TITLE>

<meta http-equiv="content-Type" content="text/html" charset="utf-8">

</HEAD>



<BODY BGCOLOR="#006699" LINK="#99CCFF" VLINK="#99CCCC" TEXT="#FFFFFF">

<center>

<br><p>


<? 


$apiKey = "apikey";



    $message = $_POST['message'];


 echo("

      <FORM name='form' method='post' action='$PHP_SELF'>

      <TABLE border='0' cellspacing='1'>

      <TR>

      <TD width='109' bgcolor='#5485B6'><P align='center'><FONT face='굴림' size='2' color='#CDDAE4'>

        message</FONT></TD>

      <TD width='541'><P>&nbsp;<INPUT type='text' name='message' SIZE=25 MAXLENGTHTH='20'></TD>

      </TR>

   <TR>

      <TD><P>&nbsp;</TD>

      <TD><P>&nbsp;<INPUT type='submit' name='submit' value='sendMessage'></TD>

      </TR>

 </TABLE>

      <input type=hidden name=mode value='up'>

      </FORM>");


 if ($mode == 'up') {

 $messageData = addslashes($message); 

sendNotification($apiKey,$messageData);

 }


function sendNotification( $apiKey, $messageData )

{   


$headers = array('Content-Type:application/json ; charset=UTF-8', 'Authorization:key=apikey');


   $connect = mysql_connect("서버URL","아이디","비밀번호") or die("SQL server에 연결할 수 없습니다."); 

mysql_select_db("DB명",$connect);


$result = mysql_query("SELECT reg_id FROM gcm_table");

     $conidx=0;



$arr   = array();

$arr['data'] = array();

$arr['data']['msg'] = $messageData;

$arr['registration_ids'] = array();




while($row = mysql_fetch_array($result))

  {

$arr['registration_ids'][$conidx] =  $row['reg_id'] ;

    $conidx++;

  }

mysql_close($connect);


$ch = curl_init();


curl_setopt($ch, CURLOPT_URL,    'https://android.googleapis.com/gcm/send');

curl_setopt($ch, CURLOPT_HTTPHEADER,  $headers);

curl_setopt($ch, CURLOPT_POST,    true);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_POSTFIELDS,json_encode($arr));



$response = curl_exec($ch);


 echo $response;

curl_close($ch);


//return $response;

}


echo("

<p>                             

</BODY>

</HTML>");

?>

--------------------------------------------------------------------------------------------------------

$headers = array('Content-Type:application/json ; charset=UTF-8', 'Authorization:key=apikey');

->apikey를 정확하게 입력해 주셔야합니다. 

https://code.google.com/apis/console/b/0/ 로 가시면 apikey를 얻을 수 있습니다.


$ch = curl_init();

-> curl을 이용해서 구글 서버에 gcm을 요청하고 있습니다. 




--------------------------------------------------------------------------------------------------------

안드로이드 매니페스트 파일 : AndroidManifest.xml


<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.appmaker.gcmtest"

    android:versionCode="1"

    android:versionName="1.0" >


    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="15" />


<permission android:name="com.appmaker.gcmtest.permission.C2D_MESSAGE" android:protectionLevel="signature" />

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<uses-permission android:name="com.appmaker.gcmtest.permission.C2D_MESSAGE" /> 


<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<uses-permission android:name="android.permission.INTERNET" /> 

<uses-permission android:name="android.permission.GET_ACCOUNTS" />

<uses-permission android:name="android.permission.WAKE_LOCK" />


    <application

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        >

        <receiver

            android:name="com.google.android.gcm.GCMBroadcastReceiver"

            android:permission="com.google.android.c2dm.permission.SEND" >

            <intent-filter>

                <action android:name="com.google.android.c2dm.intent.RECEIVE" />

                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

                <category android:name="com.appmaker.gcmtest" />

            </intent-filter>

        </receiver>

<activity android:name=".MainActivity" android:screenOrientation="portrait">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        <service android:name=".GCMIntentService" />

    </application>


</manifest>


---------------------------------------------------------------------------------------------------------

푸시 받았을때 노티피케이션 해주는 서비스: GCMIntentService .java


public class GCMIntentService extends GCMBaseIntentService {

static String re_message=null;


private static void generateNotification(Context context, String message) {

 int icon = R.drawable.ic_action_search;

 long when = System.currentTimeMillis();


 NotificationManager notificationManager = (NotificationManager) context

   .getSystemService(Context.NOTIFICATION_SERVICE);

 Notification notification = new Notification(icon, message, when);


String title = context.getString(R.string.app_name);

Intent notificationIntent = new Intent(context, MainActivity.class);

 re_message=message;


 notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

 PendingIntent intent = PendingIntent.getActivity(context, 0,notificationIntent, 0);


 notification.setLatestEventInfo(context, title, message, intent);

 notification.flags |= Notification.FLAG_AUTO_CANCEL;

 notificationManager.notify(0, notification);

}


@Override

protected void onError(Context arg0, String arg1) {


}


@Override

protected void onMessage(Context context, Intent intent) {

 String msg = intent.getStringExtra("msg");

 Log.e("getmessage", "getmessage:" + msg);


 generateNotification(context, msg);

}


@Override

protected void onRegistered(Context context, String reg_id) {

 Log.e("키를 등록합니다.(GCM INTENTSERVICE)", reg_id);

}


@Override

protected void onUnregistered(Context arg0, String arg1) {

 Log.e("키를 제거합니다.(GCM INTENTSERVICE)", "제거되었습니다.");

}

}

--------------------------------------------------------------------------------------------------------

//gcm 라이브러리 추가하는 부분은 생략하였습니다. 

//성공하시길 빕니다..^^