- php 를 사용한 gcm 푸시예제입니다.
- 안드로이드 폰에 RegistrationId 를 mysql 서버에 저장하고 서버에서 gcm 메시지를 전송하는 예제입니다.
1. mysql에 gcm_table 이라는 테이블을 만들고 reg_id,phone_num 칼럼을 만들어 줍니다(phone_num 은 폰번호인데..폰번호를 함부로 수집하면 안되겠죠^^;, 쓸데없는 칼럼이지만 그냥 만들어봤습니다;) -> 이건 생략하겠습니다
2. 앱 시작 시 RegistrationId를 만들고 php를 이용해 서버에 인서트 해줍니다.
3. gcm.jar를 안드로이드 프로젝트 libs 폴더에 등록해줍니다.
---------------------------------------------------------------------------------------------------------
앱시작시 RegistrationId 등록 클래스 : MainActivity .java
public class MainActivity extends Activity {
AsyncTask<?, ?, ?> regIDInsertTask;
TextViewmessage;
ProgressDialog loagindDialog;
String regId ;
String myResult ;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
message=(TextView)findViewById(R.id.re_message);
if(GCMIntentService.re_message!=null){
message.setText(GCMIntentService.re_message);
}else{
registerGcm();
}
}
public void registerGcm() {
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
GCMRegistrar.register(this, "프로젝트ID");
} else {
Log.e("reg_id", regId);
}
sendAPIkey();
}
private void sendAPIkey() {
String myNum="폰번호에요";
regIDInsertTask = new regIDInsertTask().execute(regId, myNum);
}
private class regIDInsertTask extends AsyncTask<String, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
loagindDialog = ProgressDialog.show(MainActivity.this, "키 등록 중입니다..",
"Please wait..", true, false);
}
@Override
protected Void doInBackground(String... params) {
HttpPostData(params[0] , params[1]);
return null;
}
protected void onPostExecute(Void result) {
loagindDialog.dismiss();
}
}
public void HttpPostData(String reg_id , String pnum) {
try {
URL url = new URL("http://서버URL/gcm_reg_insert.php"); // URL 설정
HttpURLConnection http = (HttpURLConnection) url.openConnection(); // 접속
//--------------------------
// 전송 모드 설정 - 기본적인 설정이다
//--------------------------
http.setDefaultUseCaches(false);
http.setDoInput(true);
http.setDoOutput(true);
http.setRequestMethod("POST");
http.setRequestProperty("content-type", "application/x-www-form-urlencoded");
StringBuffer buffer = new StringBuffer();
buffer.append("reg_id").append("=").append(reg_id).append("&"); // php 변수에 값 대입
buffer.append("pnum").append("=").append(pnum);
OutputStreamWriter outStream = new OutputStreamWriter(http.getOutputStream(), "EUC-KR");
PrintWriter writer = new PrintWriter(outStream);
writer.write(buffer.toString());
writer.flush();
InputStreamReader tmp = new InputStreamReader(http.getInputStream(), "EUC-KR");
BufferedReader reader = new BufferedReader(tmp);
StringBuilder builder = new StringBuilder();
String str;
while ((str = reader.readLine()) != null) {
builder.append(str + "\n");
}
myResult = builder.toString();
} catch (MalformedURLException e) {
//
} catch (IOException e) {
//
} // try
} // HttpPostData
}
---------------------------------------------------------------------------------------------------------
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:orientation="vertical"
android:layout_height="match_parent" >
<Button android:id="@+id/btn1"
android:layout_width="200dip"
android:layout_height="50dip" android:text="받은메시지" />
<TextView
android:id="@+id/re_message"
android:layout_width="match_parent"
android:layout_height="50dip"
android:background="#ffffff"
/>
</LinearLayout>
---------------------------------------------------------------------------------------------------------
RegistrationId 인서트 해주는 php : gcm_reg_insert.php
<?php
$response = array();
if (isset($_POST['reg_id']) && isset($_POST['pnum']) ) {
$reg_id = $_POST['reg_id'];
$pnum = $_POST['pnum'];
echo $reg_id,$pnum;
$connect = mysql_connect("서버URL","아이디","비밀번호") or die("SQL server에 연결할 수 없습니다.");
mysql_select_db("DB명",$connect);
$result = mysql_query("INSERT INTO gcm_table(reg_id, phone_num) VALUES('$reg_id', '$pnum')");
if ($result) {
// successfully inserted into database
$response["success"] = 1;
$response["message"] = "Product successfully created.";
echo json_encode($response);
} else {
// failed to insert row
$response["success"] = 0;
$response["message"] = "Oops! An error occurred.";
echo json_encode($response);
}
} else {
// required field is missing
$response["success"] = 0;
$response["message"] = "Required field(s) is missing";
echo json_encode($response);
}
?>
----------------------------------------------------------------------------------------------
GCMRegistrar.register(this, "프로젝트ID");
-> https://code.google.com/apis/console/b/0/ 로 연결해서 구글 계정으로 로그인하면 project:숫자가 뜹니다
project 옆에 숫자가 프로젝트ID 입니다;
$connect = mysql_connect("서버URL","아이디","비밀번호") or die("SQL server에 연결할 수 없습니다."); mysql_select_db("DB명",$connect);
-> 자신의 서버 정보를 적어주세요...^^;
길어서...다음편에 계속됩니다...
'안드로이드' 카테고리의 다른 글
TextView html 적용하기,일부 글자색 바꾸기 (0) | 2012.11.13 |
---|---|
php를 이용한 gcm 푸시 예제[2] (0) | 2012.11.05 |
Mapview 현재위치 표시 , Mapview 터치시 마커표시 (1) | 2012.11.02 |
기기별 해상도 (0) | 2012.10.18 |
카메라 호출 후 넘어오는 intent.getData()가 null 일때 해결법 (1) | 2012.09.26 |