개발 Q&A

제목 google fcm을 이용한 그룹 메세지를 구현하는데...
카테고리 기타
글쓴이 터푸 작성시각 2017/08/03 17:16:41
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 17374   RSS

많은 분들께서 요즘 fcm 을 이용하여 android 푸시를 구현하고 계신것으로 알고 있습니다.

단인 대상에게 메세지 보내는 것이야 성공/실패를 알 수 있으므로 넘어가구요

문제는 그룹 메세지인데요

하나의 메세지를 천명에게 보내야 할 경우 루프를 만번 돌아서 보내는 것 보단

아래의 배열에 천개를 넣어서 한꺼번에 보냅니다.

여기서 token3 가 불량이라고 가정하고 배열이 3개라고 가정하면

 

 
$array_module_srl = array(
    'token1',
    'token2',
    'token3'
);

$fields = array(
    'registration_ids'  => $array_module_srl, // array type
    'priority' => 'high',
    'content_available' => true,
    'notification'=> array(
        'title' => '푸시테스트',
        'body' => '푸시테스트내용',
        'sound' => 'default',
        'badge' => 0,
        'click_action' => 'OPEN_ACTIVITY_1'
    ),
    'data'=> array(
        'link'=> 'http://test.com',
        'badge'=> 0
    )
);

$API_ACCESS_KEY = 'MY_APP_KEY';
$headers = array
(
    'Authorization: key=' . $API_ACCESS_KEY,
    'Content-Type: application/json',
);

$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' );
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( $fields ) );
$result = curl_exec($ch );
curl_close( $ch );
echo $result;

구글에서 보내는 주는 결과는 다음과 같습니다.

{ "multicast_id":8579305692869767642, "success":2, "failure":1, "canonical_ids":0, "results":[ {"message_id":"0:1501749725874444%95759cfb95759cfb"} ,{"message_id":"0:1501749725875804%95759cfb95759cfb"} ,{"error":"InvalidRegistration"} ] }

문제는 token3 를 알아야 다시 보낼텐데 위의 내용으로 실패한 카운트만 알고 

실제 어떤 토큰이 실패 했는지 알수가 없다는 것입니다.

라라벨 fcm 보내까 실패한 토큰 까지 다 결과로 파싱 하든데

혹시 구글에 요청 하는 방식이 틀린것인지

경험 있으신분 알려 주시면 감사하겠습니다.

 다음글 업로드된 text pdf 를 이미지 pdf 로 변환하는... (2)
 이전글 똑같은 back버튼인데 하나는 되고 하나는 안되네요.ㅡ... (1)

댓글

마PD / 2017/08/03 17:42:41 / 추천 0

음... 제가 알기론 fcm 발송 방식이 3가지가 있습니다.

전체발송, 토픽발송, 개별발송

토픽발송하면 성공/실패 카운트가 아예 안되더라구요. 전체발송을 해야 전체 건수 중 성공/실패가 나오게 되구요.

이때 메시지id를 가지고 fcm 점검하기 기능을 이용해서 상세 내역을 확인할 수 있었던거 같습니다.

아마 이게 api 로 구현되어 있을거고 그걸 가져오는게 아닐까요?

변종원(웅파) / 2017/08/03 22:23:25 / 추천 0

라라벨 라이브러리 열어보시면 답 나올텐데요. ^^;

 

taegon / 2017/08/08 14:48:26 / 추천 0

FCM이나  GCM 문서를 다시 확인해보시는 것이 좋을 합니다.

올려주신 오류 내용을 보면 success 2건, failure 1건으로 나와있고 해당 결과가 results로 주어 집니다. 순서대로요.

순서대로 파싱한다면 3번째 토큰이 오류난 걸 바로 확인이 가능합니다. 

https://firebase.google.com/docs/cloud-messaging/server?hl=ko

위의 링크에서 응답형식을 찾아보세요.