민프
[PHP] Android, FCM, PHP을 이용해서 Push알림을 보내보자!! 본문
이전 포스트에서는
https://minf.tistory.com/14
Firebase 홈페이지 Clould Message에서 직접 보내봤었는데
이번엔 서버에서 토큰 값을 이용하여 FCM 송신을 테스트 해보려고 한다.(PHP 이용)
토큰이란 무엇일까?
https://firebase.google.com/docs/cloud-messaging/send-message?hl=ko
Firebase 공식문서에 따르면 특정 기기에 알림을 보내기 위해서
Access를 할 수 있는 Token값을 넣어줘야한다고 나와있다.
Firebase를 이용하기 위해 해당하는 앱의 디바이스 Token을 알아야하는데
디바이스 토큰은 FCM을 이용하는데에 있어 식별할 수 있는 고유 키값으로 각 디바이스를 구분하는 데 사용된다.
이 디바이스 토큰은 변경될 수 있으므로
주기적으로 DB에 update하는 방식으로 코딩을 하여야 한다.
Token을 얻는 방식으로는
https://firebase.google.com/docs/cloud-messaging/android/first-message?hl=ko
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
if (!task.isSuccessful()) {
Log.w(TAG, "Fetching FCM registration token failed", task.getException());
return;
}
// Get new FCM registration token
String token = task.getResult();
// Log and toast
String msg = getString(R.string.msg_token_fmt, token);
Log.d(TAG, msg);
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
});
이렇게 얻을 수 있다.
FCM을 하기위한 프로세스는
Volley http 통신(JAVA) -> send_FCM.php 접근(PHP, Curl 필요) ->
해당하는 서버에(https://fcm.googleapis.com/fcm/send) 값 전달(PHP)
이렇게 진행 될 것 이다.
MainActivity.java
private void send_FCM(){
Log.d(TAG+ " send_FCM", "실행");
Response.Listener<String> responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG+ " send_FCM",response );
}// public void onResponse(String response)
};
fcm_request getUserInformation = new fcm_request(token,responseListener);
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
queue.add(getUserInformation);
}
fcm_request.java
public class fcm_request extends StringRequest {
// 서버 URL 설정 ( PHP 파일 연동 )
final static private String URL = "http://.....sendCommentFCMRequest.php"; //내 서버 명
private Map<String, String> map; // Key, Value로 저장 됨
public fcm_request(String Token,Response.Listener<String> listener) {
super(Method.POST, URL, listener, null);
map = new HashMap<>();
map.put("Token",Token);
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
return map;
}
}
sendCommentFCMRequest.php
<?php
define('API_ACCESS_KEY','서버 AccessKey');
$fcmUrl = 'https://fcm.googleapis.com/fcm/send';
$token= $_POST["Token"]; //해당 Device TokenKey
$notification = [
'title' =>'title',
'body' => 'body of message.',
'icon' =>'myIcon',
'sound' => 'mySound'
];
$extraNotificationData = ["message" => $notification,"moredata" =>'dd'];
$fcmNotification = [
//'registration_ids' => $tokenList, //multple token array
'to' => $token, //single token
'notification' => $notification,
'data' => $extraNotificationData
];
$headers = [
'Authorization: key=' . API_ACCESS_KEY,
'Content-Type: application/json'
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$fcmUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fcmNotification));
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
이렇게 해주면
알림이 잘 나오는 것을 확인할 수 있다.
다음 포스트에서는 DB에 저장되어있는 유저가 올린 자신의 포스트에
댓글이 달렸을때 알림Push를 하는 기능을 구현해봐야겠다!!
'[PHP]' 카테고리의 다른 글
[PHP] Android, FCM, PHP을 이용해서 Push알림을 보내보자!!(2) (0) | 2021.07.21 |
---|---|
[PHP] AWS EC2에 curl 설치해보자!(Xshell 7사용,Ubuntu 18.04 LTS, SSH) (0) | 2021.07.07 |