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> <INPUT type='text' name='message' SIZE=25 MAXLENGTHTH='20'></TD>
</TR>
<TR>
<TD><P> </TD>
<TD><P> <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 라이브러리 추가하는 부분은 생략하였습니다.
//성공하시길 빕니다..^^
'안드로이드' 카테고리의 다른 글
android google map v2 현재위치 받아오는 법 (3) | 2012.12.31 |
---|---|
TextView html 적용하기,일부 글자색 바꾸기 (0) | 2012.11.13 |
php를 이용한 gcm 푸시 예제[1] (12) | 2012.11.05 |
Mapview 현재위치 표시 , Mapview 터치시 마커표시 (1) | 2012.11.02 |
기기별 해상도 (0) | 2012.10.18 |