AndroidManifest.xml 접기
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tistory.j2enty.c2dm"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:label="@string/app_name" android:name="C2dmActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="C2dmReceiver"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>
<category android:name="com.tistory.j2enty.c2dm" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
<category android:name="com.tistory.j2enty.c2dm" />
</intent-filter>
</receiver>
<activity android:name="ShowMsgActivity"></activity>
</application>
<permission android:name="com.tistory.j2enty.c2dm.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
<uses-permission android:name="com.tistory.j2enty.c2dm.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.WAKE_LOCK" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-sdk android:minSdkVersion="8" />
</manifest>
AndroidManifest.xml 접기
C2dmActivity 닫기
switch(v.getId())
{
case R.id.c2dm_btnRegist:
//Android C2DM에Push메시지를 받겠다는메시지를보내는Intent
//정상적으로등록이되면Android C2DMServer쪽에서 인증키를보내준다.
//이인증키는해당어플리케이션과해당기기를대표하는인증키로서버에서메시지를보낼때사용되며
//서버에등록을할때마다인증키는달라진다.
Intent registrationIntent =new Intent("com.google.android.c2dm.intent.REGISTER");
//인텐트에함께보내는내용은"app"과"sender"가있는데이두Key는 모두google에서 제시한것이기때문에
//임의로변경이불가능하다.
//app에는 해당어플리케이션정보를담아서보내고
//sender에는 개발자의주소를담아서보낸다.
registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0,new Intent(), 0));
registrationIntent.putExtra("sender",mailAddress);
startService(registrationIntent);
break
case R.id.c2dm_btnUnregist:
//Android C2DM에Push메시지를 그만받겠다는메시지를보내는Intent
Intent unregIntent =new Intent("com.google.android.c2dm.intent.UNREGISTER");
unregIntent.putExtra("app", PendingIntent.getBroadcast(this, 0,new Intent(), 0));
startService(unregIntent);
break
default:
break
}
C2dmActivity 닫기
main.xml 닫기
<?xmlversion="1.0"encoding="utf-8"
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Buttonandroid:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="가입"
android:id="@+id/c2dm_btnRegist"
/>
<Buttonandroid:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="해지"
android:id="@+id/c2dm_btnUnregist"
/>
</LinearLayout>
main.xml 닫기
C2dmReceiver 닫기
/**
*<pre>
* C2DM의사용신청후서버에서오는메시지를처리하는메소드
*</pre>
*
*@param context
*@param intent
*/
privatevoid handleRegistration(Context context, Intent intent)
{
Log.e("C2DM","handleRegistration");
//서버에서넘어오는메시지의내용에key이름 "registration_id"에는이기기에만사용하는인증키값이담겨서넘어온다.
String registration = intent.getStringExtra("registration_id");
if (intent.getStringExtra("error") !=null)
{
Log.e("C2DM","error");
}
elseif (intent.getStringExtra("unregistered") !=null)
{
Log.e("C2DM","unregistered");
}
elseif (registration !=null)
{
Log.e("C2DM", registration);
}
}
/**
*<pre>
* C2DM서버에서오는메시지(개발자측이보내는메시지)를처리하는메소드
*</pre>
*
*@param context
*@param intent
*/
privatevoid handleMessage(Context context, Intent intent)
{
Log.e("C2DM","handleMessage");
String title = intent.getStringExtra("title");
String msg = intent.getStringExtra("msg");
// 화면깨우기
PushWakeLock.acquireCpuWakeLock(context);
Intent i =new Intent(context, ShowMsgActivity.class);
Bundle b =new Bundle();
b.putString("title", title);
b.putString("msg", msg);
i.putExtras(b);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
C2dmReceiver 닫기
Auth_android 닫기
publicclass Auth_android
{
privatestatic StringHOST ="https://www.google.com/accounts/ClientLogin"
privatestatic StringEMAIL ="abcdedfe@gmail.com" //사용자 아이디
privatestatic StringPASS ="password" //비밀번호
privatestatic StringSOURCE ="androidpush-test. nexusone-2.2" //어플리케이션에 대한 간단한 설명
publicstaticvoid main( String[] args )throws Exception
{
try {
StringBuffer postDataBuilder =new StringBuffer();
postDataBuilder.append("Email=" +EMAIL);
postDataBuilder.append("&Passwd=" +PASS);
postDataBuilder.append("&accountType=GOOGLE");
postDataBuilder.append("&source=" +SOURCE);
postDataBuilder.append("&service=ac2dm");
byte[] postData = postDataBuilder.toString().getBytes("UTF8");
URL url =new URL(HOST);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length",Integer.toString(postData.length));
OutputStream out = conn.getOutputStream();
out.write(postData);
out.close();
BufferedReader in =new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) !=null) {
System.out.println(inputLine);
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
Auth_android 닫기
접기
publicclass Push
{
privatestatic StringHOST ="http://android.apis.google.com/c2dm/send"
//해당어플리케이션의인증키
privatestatic StringAUTH ="DQAAAKkAAAA...................................";
//C2DM을사용하겠다고신청한디바이스의인증키
privatestatic String[]arrId =
{
"APA91bF6WBifiEJ0VtG2bxmKBc_EPWVhmB......................................"
};
publicstaticvoid main( String[] args )throws Exception
{
for (int i=0; i<arrId.length i++)
{
//보낼메시지
androidPush(arrId[i],"바보","꺼져");
}
}
publicstaticvoid androidPush(String regId, String title, String msg)throws Exception
{
try
{
StringBuffer postDataBuilder =new StringBuffer();
postDataBuilder.append("registration_id=" + regId);// 등록ID
postDataBuilder.append("&collapse_key=1");
postDataBuilder.append("&delay_while_idle=1");
postDataBuilder.append("&data.title=" + URLEncoder.encode(title,"UTF-8"));// 제목
postDataBuilder.append("&data.msg=" + URLEncoder.encode(msg,"UTF-8"));// 내용
byte[] postData = postDataBuilder.toString().getBytes("UTF8");
URL url =new URL(HOST);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length",Integer.toString(postData.length));
conn.setRequestProperty("Authorization","GoogleLogin auth="+AUTH);
OutputStream out = conn.getOutputStream();
out.write(postData);
out.close();
conn.getInputStream();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
접기
출처 http://j2enty.tistory.com/entry/Android-Push-NotificationC2DM-Service
'Android > Tip&Tech' 카테고리의 다른 글
ndroid Fake Iphone UI 2 Source (0) | 2011.04.29 |
---|---|
태스크란? (Task, Activity Stack)어피니티란? (Android Affinity)플래그란? (0) | 2011.04.27 |
android c2dm sample source (1) | 2011.04.26 |
c2dm simple example (0) | 2011.04.25 |
Push Notification on iOS & Android (0) | 2011.04.25 |