Firebase Java API와 Push 알림 통합
11286 단어 firebaseandroidnotificationjava
Firebase Java API와 Push 알림 통합
Firebase는 현재 시장에서 가장 통용되는 응용 프로그램 개발 플랫폼 중의 하나다.
본문은 최초로 발표되었다: https://quod.ai/post/integrating-push-notifications-with-firebase-java-api
구글은 2014년 최초로 독립회사였던 회사를 인수했고 그 이후 다시는 돌아볼 필요가 없었다.현재 Firebase는 18가지 다른 제품을 가지고 있어 이동과 인터넷 응용의 각종 수요를 만족시킬 수 있다.오늘은 Firebase Cloud Messaging (속칭 FCM) 을 사용하여 안드로이드 프로그램에서 알림을 전송하는 방법을 연구할 것이다.이 자습서는 Android 프로그래밍 및 Firebase에 대한 기본 지식을 갖추고 있다고 가정합니다.너는 Firebase Console에 가서 프로젝트를 어떻게 설정하는지 배울 수 있다.
몰래 엿보다
다음은 우리가 구축할 프로그램의 작은 미리보기입니다.우리는 두 개의 응용 프로그램이 있는데, 하나는 푸시 알림을 보내는 데 사용되고, 다른 하나는 푸시 알림을 받는 데 사용된다.발송자는 특정 주제에 통지를 보내고 이 특정 주제의 모든 구독자는 통지를 받을 것이다.이것도 메시지 전달에서 유행하는pub-sub 디자인 모델의 실현이다.
발송자는 두 개의 필드가 있는데, 메시지의 제목과 본문, 그리고 메시지를 주제에 보내는 단추가 있다.우리는 새로운 혜택이 있을 때마다 사용자에게 알릴 수 있는 '거래' 라는 주제를 만들었습니다.
수신 프로그램은 템플릿 안드로이드 코드로 만들어졌지만, 이 테마에 탐지기가 구독을 시켜서, 이 테마에 메시지를 보낼 때마다 알림을 받을 수 있도록 합니다.
보낸 사람 코드
먼저 발송자 코드를 봅시다.이 부분은 좀 복잡하다.시작하기 전에 뭔가가 필요해.먼저 Firebase 컨트롤러로 가서 '프로젝트 설정' 의 '클라우드 메시지' 옵션에서 서버 키를 가져옵니다.이것은 요청을 검증하고 요청의 제목에 추가해야 합니다.
상수 파일
public class Constants {
public static final String SERVER_KEY = "ENTER YOUR SERVER KEY HERE";
public static final String BASE_URL = "https://fcm.googleapis.com";
public static final String CONTENT_TYPE = "application/json";
}
Constants.java의 컨텍스트에서 보기Quod AI
1-5 행: Constants라는 클래스를 만들고 모든 상수 값을 클래스에 저장합니다.Firebase 클라우드 메시지에 대한 서버 키, 컨텐츠 유형 및 기본 URL이 있습니다.Firebase 콘솔의 값으로 서버 키를 대체하는 것을 기억하십시오.
모범반
public class Notification {
private String title;
private String body;
public Notification(String title, String body) {
this.title = title;
this.body = body;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
Notification.java의 컨텍스트에서 보기Quod AI
1-21 행: 이제 모든 모델 클래스를 생성합니다.알림 데이터와 응답에 필요한 것 중 하나입니다.다음에 제시된 알림 클래스는 필드, 제목, 주체, 구조 함수와 Getter/setter를 포함합니다.이것은 매우 간단한 자바 코드다.
public class PushNotification {
private Notification notification;
private String to;
public PushNotification(Notification notification, String to) {
this.notification = notification;
this.to = to;
}
public PushNotification(Notification data) {
this.notification = data;
}
public Notification getNotification() {
return notification;
}
public void setNotification(Notification data) {
this.notification = data;
}
public String getTo() {
return to;
}
public void setTo(String recipient) {
this.to = recipient;
}
}
PushNotification.java의 컨텍스트에서 보기Quod AI
1-24 줄: 다음에 우리는 PushNotification 클래스가 있는데 이것은 우리가 주제로 전송하는 실제 클래스를 사용할 것이다.여기에 클래스 알림 필드와 문자열 필드 'to' 가 있습니다. 메시지를 보내는 수신자나 테마를 표시합니다.
이제 API 호출을 위한 인터페이스를 생성합니다.Android의 개조 라이브러리를 사용하여 API 호출을 수행합니다.Retrofit는 경량급이고 사용하기 쉬운 HTTP 클라이언트로 안드로이드와 자바에 적용된다.그것을 사용하기 시작하는 데 필요한 것은 구축에 의존항만 추가하는 것입니다.그레델 서류.도서관에 대해 더 잘 알 수 있도록 위에서 제시한 공식 사이트에서 더 많은 정보를 읽을 수 있다.응용 프로그램에서 라이브러리를 사용할 때 문서를 읽는 것은 항상 좋은 방법이다.
Notification API 인터페이스를 자세히 살펴보겠습니다.
public interface NotificationAPI {
@Headers({"Authorization: key=" + Constants.SERVER_KEY, "Content-Type:" + Constants.CONTENT_TYPE})
@POST("fcm/send")
Call postNotification(@Body PushNotification data);
}
컨텍스트 보기Quod AI
1-5줄: 우리 한 줄씩 가자.첫 번째 줄 @Headers는 기본 헤더를 덮어쓰고 이전에 얻은 서버 키를 추가하고 내용 형식을 응용 프로그램/json으로 설정합니다.
주석은 이것이post 요청이고 괄호 안의 값이 단점을 표시합니다.그리고 주체 중의 PushNotiFaction 대상을 서버에 전달할 때 실제 방법 이름을 얻을 것입니다. 이 이름은 응답 대상을 되돌려줍니다. (정의는 상기 참조)
이것들을 모두 주요 활동에 두다
public static final String TOPIC = "/topics/deals";
Button sendButton = findViewById(R.id.send);
EditText titleText = findViewById(R.id.title);
EditText contentText = findViewById(R.id.content);
sendButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String title = titleText.getText().toString();
String content = contentText.getText().toString();
if(!title.isEmpty() && !content.isEmpty()){
Notification message = new Notification(title, content);
PushNotification data = new PushNotification(message, TOPIC);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
NotificationAPI apiService =
retrofit.create(NotificationAPI.class);
Call call = apiService.postNotification(data);
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, retrofit2.Response response) {
if (!response.isSuccessful()) {
Log.d(TAG, String.valueOf(response.code()));
return;
}
titleText.setText("");
contentText.setText("");
Toast.makeText(MainActivity.this, "Message Pushed", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call call, Throwable t) {
Log.d(TAG, t.getMessage());
MainActivity.java의 컨텍스트에서 보기Quod AI
첫 번째 줄: 코드에'deals'라는 주제를 만들었는데 그 앞에'topics'라는 단어를 붙이는 것은 좋은 방법으로 여겨진다.
3-5줄: 프로그램에서 사용할 수 있도록 모든 텍스트 필드와 발송 단추를 검색해야 합니다.XML 디자인 코드에 id가 언급되었는데, 말 그대로 findViewById는 id에 따라 해당하는 활동에서 구성 요소를 가져오는 데 사용됩니다
7-8 줄: 이 listener에 프로그램에 필요한 나머지 논리를 쓰기 위해 단추에 onClickListener를 설정합니다.
9-12 줄: 단추를 누르면 텍스트 필드의 값을 검색합니다.그리고 그것으로 우리가 주제에 보내야 할 대상을 구성한다.
15-18 행: 다음은 API 호출을 위한 개조 인스턴스를 작성합니다.Google은 상수 파일에서 기본 URL을 설정하고 변환기 공장을 설정합니다. (이 예는 Gson) JSON을 자바 POJO로 변환하고, 반대로도 마찬가지입니다.
20-21 줄: 그리고 Notifications API 서비스의 실례를 만들어서 우리가 방금 만든 리메이크 실례에 전달합니다.
22-36 줄: API 호출을 개조할 때 우리는 응답을 받은 후에 다른 방식으로 사용자에게 줄 서기 방법을 사용할 수 있다.우리의 경우, 우리는 잔을 들어 이 메시지가 이미 전달되었다고 축하할 것이다.만약 실패한다면 축배사는 예외를 나타낼 것이다.
수신 코드
FirebaseMessaging.getInstance().subscribeToTopic(TOPIC)
.addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
String msg = ("Subscribed");
if (!task.isSuccessful()) {
msg = "Couldn't subscribe to topic";
}
Log.d(TAG, msg);
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
});
MainActivity (Receiver).java의 컨텍스트에서 보기Quod AI
1-12 줄: 수신기는 기본적으로 빈 안드로이드 프로그램으로 테마를 구독합니다.이것은 우리가 언급한 주제를 감청합니다. 새로운 메시지가 나오면 탐지기를 터치하고 유효 부하로 알림을 생성합니다.MainActivity에서 우리가 해야 할 유일한 일은 우리가 이전에 만든 테마를 구독하는 것이다.만일 모든 것이 성공한다면, 우리는 "구독했습니다"라는 메시지만 보일 것입니다. 그렇지 않으면 "테마에 구독할 수 없습니다."
서비스 등급
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getNotification().getBody());
}
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle(remoteMessage.getNotification().getTitle())
.setContentText(remoteMessage.getNotification().getBody())
.setSmallIcon(R.mipmap.ic_launcher)
.build();
NotificationManagerCompat manager = NotificationManagerCompat.from(getApplicationContext());
manager.notify(123, notification);
MyFirebaseMessagingService.java의 컨텍스트에서 보기Quod AI
네 번째 줄: 현재 서비스 클래스를 만듭니다.FirebaseMessaging Service 클래스를 확장하는 클래스입니다.알림을 터치하려면 onMessageReceived 방법을 다시 써야 합니다.
6-10 줄: 메시지 크기가 0보다 크고 알림 필드가 비어 있지 않으면 새 알림을 만듭니다.탐지기에서 캡처한 메시지에서 알림 제목과 내용을 검색합니다.
12-16 줄: 알림에서도 사용자 정의 아이콘을 사용할 수 있지만 알림에서도 프로그램 아이콘 자체를 사용합니다.
17-18 줄: 마지막으로 Notification Manager Compat을 사용하여 프로그램의 상하문을 가져오고 알림을 화면으로 전송합니다.
큰일 좀 해!
이것은 Android에서 알림 푸시 기능의 시작일 뿐입니다.Firebase 클라우드 메시지 전달은 입문하기 쉬우나, 방금 보신 복잡한 기능 (예를 들어 술집 구독 메시지 전달) 은 자주 무시됩니다.식당 근처에서 사용자에게 푸시 알림을 보내 당일의 거래 상황을 알리는 앱을 만드는 것을 상상해 보자.가능성은 무궁하다!
GitHub 링크
https://github.com/QuodAI/tutorial-push-notifications-with-firebase-api-v2
Reference
이 문제에 관하여(Firebase Java API와 Push 알림 통합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/quod_ai/integrating-push-notifications-with-firebase-java-api-531
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
public class Constants {
public static final String SERVER_KEY = "ENTER YOUR SERVER KEY HERE";
public static final String BASE_URL = "https://fcm.googleapis.com";
public static final String CONTENT_TYPE = "application/json";
}
public class Notification {
private String title;
private String body;
public Notification(String title, String body) {
this.title = title;
this.body = body;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
public class PushNotification {
private Notification notification;
private String to;
public PushNotification(Notification notification, String to) {
this.notification = notification;
this.to = to;
}
public PushNotification(Notification data) {
this.notification = data;
}
public Notification getNotification() {
return notification;
}
public void setNotification(Notification data) {
this.notification = data;
}
public String getTo() {
return to;
}
public void setTo(String recipient) {
this.to = recipient;
}
}
public interface NotificationAPI {
@Headers({"Authorization: key=" + Constants.SERVER_KEY, "Content-Type:" + Constants.CONTENT_TYPE})
@POST("fcm/send")
Call postNotification(@Body PushNotification data);
}
public static final String TOPIC = "/topics/deals";
Button sendButton = findViewById(R.id.send);
EditText titleText = findViewById(R.id.title);
EditText contentText = findViewById(R.id.content);
sendButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String title = titleText.getText().toString();
String content = contentText.getText().toString();
if(!title.isEmpty() && !content.isEmpty()){
Notification message = new Notification(title, content);
PushNotification data = new PushNotification(message, TOPIC);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
NotificationAPI apiService =
retrofit.create(NotificationAPI.class);
Call call = apiService.postNotification(data);
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, retrofit2.Response response) {
if (!response.isSuccessful()) {
Log.d(TAG, String.valueOf(response.code()));
return;
}
titleText.setText("");
contentText.setText("");
Toast.makeText(MainActivity.this, "Message Pushed", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call call, Throwable t) {
Log.d(TAG, t.getMessage());
FirebaseMessaging.getInstance().subscribeToTopic(TOPIC)
.addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
String msg = ("Subscribed");
if (!task.isSuccessful()) {
msg = "Couldn't subscribe to topic";
}
Log.d(TAG, msg);
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
});
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getNotification().getBody());
}
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle(remoteMessage.getNotification().getTitle())
.setContentText(remoteMessage.getNotification().getBody())
.setSmallIcon(R.mipmap.ic_launcher)
.build();
NotificationManagerCompat manager = NotificationManagerCompat.from(getApplicationContext());
manager.notify(123, notification);
Reference
이 문제에 관하여(Firebase Java API와 Push 알림 통합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/quod_ai/integrating-push-notifications-with-firebase-java-api-531텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)