안드로이드에서 푸시메시지가 버전별로 상이하게 보이네요?
안드로이드에서 notification 을 구현하였는데 오랜기간 사용하다보니
당연히 그 사이에 안드로이드 업그레이드가 많이 이루어졌습니다.
그로 인해서 안드로이드 버전별로 텍스트 위치나 크기가 상이하던데
이를 버전별로 동일하게 보여주고싶은데 어찌해야할지 난감합니다.
도움부탁드립니다~~
55글자 더 채워주세요.
1개의 답변이 있어요!
Firebase Cloud Messaging을 사용하여 안드로이드 푸시 알림을 구현 하는 방법 입니다.
1. project level의 build.gradle 파일에 google-service를 추가합니다.
dependencies { classpath 'com.android.tools.build:gradle:2.1.0' //classpath 'com.google.gms:google-services:3.0.0' classpath 'com.google.gms:google-services:3.0.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files}2. app level의 build.gradle 파일에 firebase-messaging을 추가합니다. 그리고 google-service plugin을 apply 해줍니다.
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.google.firebase:firebase-messaging:9.0.2'}apply plugin: 'com.google.gms.google-services'3. Android-manifest.xml
<application></application> 태그 안에 아래 내용을 추가해 줍니다.<service android:name=".FirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter></service><service android:name=".FirebaseInstanceIDService" > <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> </intent-filter></service>4. FirebaseInstanceIDService.java
/** * Created by HKH on 2016-06-28. */import android.util.Log;import com.google.firebase.iid.FirebaseInstanceId;import com.google.firebase.iid.FirebaseInstanceIdService;public class FirebaseInstanceIDService extends FirebaseInstanceIdService { private static final String TAG = "MyFirebaseIIDService"; // [START refresh_token] @Override public void onTokenRefresh() { // Get updated InstanceID token. String token = FirebaseInstanceId.getInstance().getToken(); }}사용자 기기별 token을 생성하는 클래스 입니다.
나중에 push 알림을 특정 타겟에게 보낼 때 사용되는 고유 키 값 입니다.
이 토큰값을 용도에 맞게 사용하시면 됩니다.
5. FirebaseMessagingService.java
/** * Created by HKH on 2016-06-28. */import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.media.RingtoneManager;import android.net.Uri;import android.os.PowerManager;import android.support.v4.app.NotificationCompat;import com.google.firebase.messaging.RemoteMessage;import java.io.BufferedInputStream;import java.net.URL;import java.net.URLConnection;public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService { private static final String TAG = "FirebaseMsgService"; // [START receive_message] @Override public void onMessageReceived(RemoteMessage remoteMessage) { sendPushNotification(remoteMessage.getData().get("message")); } private void sendPushNotification(String message) { System.out.println("received message : " + message); Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, PendingIntent.FLAG_ONE_SHOT); Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.noti).setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher) ) .setContentTitle("Push Title ") .setContentText(message) .setAutoCancel(true) .setSound(defaultSoundUri).setLights(000000255,500,2000) .setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wakelock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG"); wakelock.acquire(5000); notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); }}푸시메세지가 들어왔을때 실제 사용자에게 푸시알림을 만들어서 띄워주는 클래스 입니다.
Api를 통해 푸시 알림을 전송하면 입력한 내용이 message에 담겨서 오게 됩니다.
6. MainActivity.java
import com.google.firebase.messaging.FirebaseMessaging;onCreate 함수 안에FirebaseMessaging.getInstance().subscribeToTopic("notice");-> 여기서 topic은 api를 사용하여 푸시 알림 전송시 같은 토픽명 그룹 전체에 메세지를 발송 할 수 있습니다.테스트는 Firebase Console의 Notification 메뉴에서 가능합니다.