본문 바로가기
PHP

[PHP] 푸시 토큰 관리

by rairen 2019. 9. 23.

이번 글은 토큰 관리 관려하여 작성하려고합니다.

 

	$title         = '';
    $message       = '';
    $token_bundle  = 1000;//발송 당 토큰 개수
    $token_list    = array();
    $sent          = array(
        'total'   => '',
        'success' => '',
        'fail'    => ''
    );

    $sent['total'] = [총개수];
    $total_page    = ceil($sent['total'] / $token_bundle);
    for ($i = 0; $i < $total_page; $i++) {
        //시작지점
        $start = $token_bundle * $i;
        $list  = array();
        //데이터
        $list = [토큰 데이터];
        foreach ($list as $key => $val) {
            $token_list[] = $val['token'];
        }/*
        $result          = send_notification($token_list, $title, $message);
        $sent['success'] = $result->success;//성공건
        $sent['fail']    = $result->fail;//실패건
        if ($result->fail > 0 and $result->fail == count($result->results)) {
            $alert_message = '발송 실패 건수(' . $result->fail . ')';
            $delete_list = array();
            foreach ($result->results as $k => $v) {
                switch ($v['error']) {
                    //case 'MissingRegistration'://누락된 등록 토큰
                    //case 'InvalidPackageName'://잘못된 패키지 이름
                    //case 'InvalidApnsCredential'://잘못된 APN 인증 정보
                    //case 'TopicsMessageRateExceeded'://주제 메시지 비율 초과
                    //case 'DeviceMessageRateExceeded'://기기 메시지 비율 초과
                    //case 'InternalServerError'://내부 서버 오류
                    //case 'Unavailable'://시간 초과
                    //case 'InvalidTtl'://잘못된 수명
                    //case 'InvalidDataKey'://잘못된 데이터 키
                    //case 'MessageTooBig'://너무 큰 메시지
                    //case 'InvalidParameters'://잘못된 매개변수
                    //case 'MismatchSenderId'://일치하지 않는 발신자
                    case 'InvalidRegistration'://잘못된 등록 토큰
                    case 'NotRegistered'://등록되지 않은 기기
                        $delete_list[] = $token_list[$k];//삭제배열
                        $d_result = [삭제결과];//바로 삭제처리할경우
                        break;
                }
            }
            if(count($delete_list) > 0){
            	// 토큰 삭제 처리
            }
        }*/
    }

작성되 코드는 푸시 테이블을 이용할 때, limit으로 페이징하여 발송을 진행합니다.

그리고 발송했을 때, return 받은 값을 확인하여 실패건이 있으며 실패 에러개수만큼 반복 돌리면서 디비에서 삭제하거나 아니면 삭제할 토큰을 배열 변수에 담아서 한번에 처리하면 됩니다.

 

이러면 실패건에 따라서 토큰을 삭제한다던가 내역을 작성한다던가 할 수 있습니다.

 

FCM 오류 응답코드는  여기를 클릭하여 참고하시면 됩니다.

반응형