dependencies 에 compile 'com.google.android.gms:play-services:8.1.0' 추가
ex.
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.google.android.gms:play-services:8.1.0' }
Project > app > src > main > AndroidManifest.xml (파일)
코드보기로 전환한 다음 다음 항목들을 추가
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission android:name="com.example.gcm.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="com.example.gcm.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<service android:name=".PushNotificationService" android:exported="false">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</service>
<receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="패키지명" />
</intent-filter>
</receiver>
패키지명 모르겠다면
Project > app > src > main > java > MainActivity.java (파일) 맨 첫번째줄 package 다음에 써진 단어들...
ex.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <? xml version = "1.0" encoding = "utf-8" ?> package = "패키지명" > < uses-permission android:name = "android.permission.INTERNET" /> < uses-permission android:name = "android.permission.WAKE_LOCK" /> < uses-permission android:name = "com.google.android.c2dm.permission.RECEIVE" /> < permission android:name = "com.example.gcm.permission.C2D_MESSAGE" android:protectionLevel = "signature" /> < uses-permission android:name = "com.example.gcm.permission.C2D_MESSAGE" /> < uses-permission android:name = "android.permission.READ_PHONE_STATE" /> < application android:allowBackup = "true" android:icon = "@mipmap/ic_launcher" android:label = "@string/app_name" android:supportsRtl = "true" android:theme = "@style/AppTheme" > < activity android:name = ".MainActivity" > < intent-filter > < action android:name = "android.intent.action.MAIN" /> < category android:name = "android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > < service android:name = ".PushNotificationService" android:exported = "false" > < intent-filter > < action android:name = "com.google.android.c2dm.intent.RECEIVE" /> </ intent-filter > </ service > < receiver android:name = "com.google.android.gms.gcm.GcmReceiver" android:exported = "true" android:permission = "com.google.android.c2dm.permission.SEND" > < intent-filter > < action android:name = "com.google.android.c2dm.intent.RECEIVE" /> < category android:name = "패키지명" /> </ intent-filter > </ receiver > </ application > </ manifest > |
Project > app > src > main > java (우클릭 후 파일 생성)
파일명 : GCMClientManager.java
아래코드 추가
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | package 패키지명; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.os.AsyncTask; import android.util.Log; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesUtil; import com.google.android.gms.gcm.GoogleCloudMessaging; import com.google.android.gms.iid.InstanceID; import java.io.IOException; public class GCMClientManager { public static final String TAG = "GCMClientManager" ; public static final String EXTRA_MESSAGE = "message" ; public static final String PROPERTY_REG_ID = "프로젝트아이디번호" ; private static final String PROPERTY_APP_VERSION = "1.0" ; private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000 ; private GoogleCloudMessaging gcm; private String regid; private String projectNumber; private Activity activity; public GCMClientManager(Activity activity, String projectNumber) { this .activity = activity; this .projectNumber = projectNumber; this .gcm = GoogleCloudMessaging.getInstance(activity); } private static int getAppVersion(Context context) { try { PackageInfo packageInfo = context.getPackageManager() .getPackageInfo(context.getPackageName(), 0 ); return packageInfo.versionCode; } catch (NameNotFoundException e) { throw new RuntimeException( "Could not get package name: " + e); } } public void registerIfNeeded( final RegistrationCompletedHandler handler) { if (checkPlayServices()) { regid = getRegistrationId(getContext()); if (regid.isEmpty()) { registerInBackground(handler); } else { Log.i(TAG, regid); handler.onSuccess(regid, false ); } } else { Log.i(TAG, "No valid Google Play Services APK found." ); } } private void registerInBackground( final RegistrationCompletedHandler handler) { new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { try { if (gcm == null ) { gcm = GoogleCloudMessaging.getInstance(getContext()); } InstanceID instanceID = InstanceID.getInstance(getContext()); regid = instanceID.getToken(projectNumber, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null ); Log.i(TAG, regid); storeRegistrationId(getContext(), regid); } catch (IOException ex) { handler.onFailure( "Error :" + ex.getMessage()); } return regid; } @Override protected void onPostExecute(String regId) { if (regId != null ) { handler.onSuccess(regId, true ); } } }.execute( null , null , null ); } private String getRegistrationId(Context context) { final SharedPreferences prefs = getGCMPreferences(context); String registrationId = prefs.getString(PROPERTY_REG_ID, "" ); if (registrationId.isEmpty()) { Log.i(TAG, "Registration not found." ); return "" ; } int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE); int currentVersion = getAppVersion(context); if (registeredVersion != currentVersion) { Log.i(TAG, "App version changed." ); return "" ; } return registrationId; } private void storeRegistrationId(Context context, String regId) { final SharedPreferences prefs = getGCMPreferences(context); int appVersion = getAppVersion(context); Log.i(TAG, "Saving regId on app version " + appVersion); SharedPreferences.Editor editor = prefs.edit(); editor.putString(PROPERTY_REG_ID, regId); editor.putInt(PROPERTY_APP_VERSION, appVersion); editor.commit(); } private SharedPreferences getGCMPreferences(Context context) { return getContext().getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE); } private boolean checkPlayServices() { int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getContext()); if (resultCode != ConnectionResult.SUCCESS) { if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) { GooglePlayServicesUtil.getErrorDialog(resultCode, getActivity(), PLAY_SERVICES_RESOLUTION_REQUEST).show(); } else { Log.i(TAG, "This device is not supported." ); } return false ; } return true ; } private Context getContext() { return activity; } private Activity getActivity() { return activity; } public static abstract class RegistrationCompletedHandler { public abstract void onSuccess(String registrationId, boolean isNewRegistration); public void onFailure(String ex) { Log.e(TAG, ex); } } } |
Project > app > src > main > java (우클릭 후 파일 생성)
파일명 : PushNotificationService.java
아래코드 추가
1 2 3 4 5 6 7 8 9 10 11 12 | package 패키지명; import android.os.Bundle; import com.google.android.gms.gcm.GcmListenerService; public class PushNotificationService extends GcmListenerService { @Override public void onMessageReceived(String from, Bundle data) { String message = data.getString( "message" ); //createNotification(mTitle, push_msg); } } |
Project > app > src > main > java > MainActivity.java (파일)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | package 패키지명; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.telephony.TelephonyManager; import android.util.Log; import java.util.HashMap; public class MainActivity extends AppCompatActivity { String PROJECT_NUMBER= "프로젝트아이디번호" ; String phoneNum = null ; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); // 휴대폰번호 알아내기 try { TelephonyManager telManager = (TelephonyManager)getSystemService( this .TELEPHONY_SERVICE); phoneNum = telManager.getLine1Number(); } catch (Exception e){ } // XML파일 화면에 보여주기 setContentView(R.layout.activity_main); GCMClientManager pushClientManager = new GCMClientManager( this , PROJECT_NUMBER); pushClientManager.registerIfNeeded( new GCMClientManager.RegistrationCompletedHandler() { @Override public void onSuccess(String registrationId, boolean isNewRegistration) { Log.d( "Registration id" , registrationId); if (phoneNum== null ){phoneNum= "" ;} // 담아서 쓰던 전송해서 쓰던... HashMap<Object , Object> param = new HashMap<Object , Object>(); if (phoneNum!= "" ) { param.put( "regid" , registrationId); param.put( "phone" , phoneNum); } String postData = "HPN=" +phoneNum+ "&RegId=" +registrationId; } @Override public void onFailure(String ex) { super .onFailure(ex); } }); } } |