Firebase 클라우드 메시징 - 토큰의 유효성을 확인하는 방법
저는 Firebase FCM(클라우드 메시징)을 사용하고 있으며, 고객 장치에서 새 토큰이 생성될 때마다 아래의 수정된 코드에 따라...CFM API를 사용하여 향후 푸시 알림을 서버에서 장치로 전송할 수 있도록 이 새 TOKEN을 저장하는 SERVER DB(Cloud)로 보냅니다.
//public class CFMInstanceIDService extends FirebaseInstanceIdService ...
public void onTokenRefresh() {
...
String cfmToken = FirebaseInstanceId.getInstance().getToken();
...
sendRegistrationToServer(customerGuid, cfmToken);
}
이렇게 하면 고객이 로그인한 모든 (여러) 장치 목록이 서버에 표시됩니다. (태블릿, 전화기, iPhone, Android 등)
토큰을 언제든지 확인/유효화할 수 있는 방법이 있습니까?
고객과 관련된 모든 토큰이 실제 장치에 속하는지 알고 싶습니다.존재하지 않는 토큰에 푸시 알림을 보내지 않습니다.
다음은 실제로 메시지를 보내지 않고 토큰의 유효성을 검사하는 방법을 보여주는 컬 요청의 예입니다.
curl -H "Content-Type: application/json" -H "Authorization: key=$FCM_API_KEY" https://fcm.googleapis.com/fcm/send -d '{"registration_ids":["$FCMTOKEN"]}'
잘못된 응답의 예:
{"multicast_id":7452350602151058088,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}
유효한 응답의 예:
{"multicast_id":9133870199216310277,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1502817580237626%f590ddc2f9fd7ecd"}]}
저는 구글의 소방기지 지원팀으로부터 이 답변을 받았습니다.
실제로 해결 방법이 있습니다. 다음을 사용할 수 있습니다.dry_run = true
이 매개 변수를 true로 설정하면 개발자가 실제로 메시지를 보내지 않고 요청을 테스트할 수 있습니다.
사용자가 구독을 취소하면 다음과 같은 응답이 있습니다.NotRegistered
하지만 실제 전송은 수행되지 않습니다.
FCM 토큰의 유효성을 확인하려면 다음을 호출합니다.
(GET) https://iid.googleapis.com/iid/info/YOUR_APP_TOKEN_HERE
[Header] => 'Authorization: key=YOUR_KEY'
간단하고 쉽습니다.
토큰이 유효하면 JSON 형식의 세부 정보가 포함된 200개의 상태 코드가 반환되고, 유효하지 않으면 JSON 형식의 오류 세부 정보가 포함된 400개의 상태 코드가 반환됩니다.
그런 것은 존재하지 않습니다. 토큰에서 얻을 수 있는 유일한 정보는 앱 정보이며 유효 여부는 아닙니다.
https://developers.google.com/instance-id/reference/server#get_information_about_app_instances
당신이 해야 할 일은 푸시아웃을 보낼 때 반응을 지켜보는 것이고 키가 더 이상 유효하지 않으면 응답은 어떤 키를 삭제해야 하는지 알려줄 것입니다.NotRegistered
https://firebase.google.com/docs/cloud-messaging/server
다운스트림 메시지를 보내기 전에 토큰이 여전히 유효한지 확인할 수 있는 방법이 없습니다.메시지를 보낸 후 응답을 확인한 후 응답에 오류가 있는지 확인해야 합니다.
를 들어,가 "" " " " " 를 하는 입니다.200 + error:NotRegistered
http 코드. 기존 등록 토큰이 더 이상 유효하지 않을 수 있음을 의미합니다.
"FGC의 다운스트림 메시지 오류 응답 코드" 섹션에는 가능한 모든 상태 응답이 문서화되어 있습니다.
adminsdk 자격 증명이 있는 경우 다음 코드를 사용할 수 있습니다.
func TestPushToken(t *testing.T) {
ctx := context.Background()
opt := option.WithCredentialsJSON([]byte(credential))
app, err := firebase.NewApp(ctx, nil, opt)
if err != nil {
t.Error(err)
}
msg := &messaging.Message{
Notification: &messaging.Notification{
Title: "Hi",
Body: fmt.Sprintf("Welcome at %d", time.Now().Unix()),
},
Token: pushToken,
}
fcmClient, err := app.Messaging(ctx)
run, err := fcmClient.SendDryRun(ctx, msg)
if err != nil {
t.Error(err)
}
fmt.Println(run)
}
오류가 있으면 pushToken이 유효하지 않음을 의미합니다.아니면 다음과 같은 반응을 얻을 것입니다.
/messages/fake_message_id
언급URL : https://stackoverflow.com/questions/38442434/firebase-cloud-messaging-how-to-validate-tokens
'programing' 카테고리의 다른 글
스프링 부트에서 최대 절전 모드 유형-52를 사용할 때 하이퍼리스틱스 배너를 비활성화하는 방법은 무엇입니까? (0) | 2023.06.30 |
---|---|
VBA 매크로를 사용하여 Excel 시트 이름 바꾸기 (0) | 2023.06.30 |
MongoDB의 열거형 (0) | 2023.06.30 |
문자열의 첫 번째 문자 대문자화 (0) | 2023.06.30 |
파일에 YAML 형식의 데이터를 어떻게 쓸 수 있습니까? (0) | 2023.06.30 |