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.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" 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
아래코드 추가
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
아래코드 추가
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 (파일)
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); } }); } }