OZ-Coding-School / oz_02_collabo-003-BE

oz_02_collabo-003-BE
3 stars 1 forks source link

[BE] Fix: ios 푸시 알림 트래픽 분산 코드 추가 #158

Closed mingmingeee96 closed 3 months ago

mingmingeee96 commented 3 months ago

이거 PR을 올린다고 해놓고 전화가 와서 이제야 올리네요,,,ㅎㅎ 사실 한 거라곤 현민님께서 작성하신 코드 ios ver로 만든 거입니다 ㅎㅎㅎ 확인 부탁드려요~

# IOS push 보내는 함수
def send_push_ios():
    try:
        # DB에서 IOS 디바이스 토큰 가져오기
        ios_registration_tokens_all = list(DeviceToken.objects.filter(device_os='ios').values_list('token', flat=True))

        #푸시 분산 발송용 리스트 생성
        ios_registration_tokens = []
        #한번에 푸시 발송 할 수량 설정 : kluck_env.env_settings.py
        push_cnt = env.push_cnt
        #푸시를 발송하는 단위 시간 : kluck_env.env_settings.py
        push_term = env.push_term        

        #전체 토큰을 발송량에 따라 분산 저장
        for i in range(0, len(ios_registration_tokens_all), push_cnt):
            temp = ios_registration_tokens_all[i:i+push_cnt]
            ios_registration_tokens.append(temp)

        # 오늘 날짜 가져오기
        today = datetime.now().strftime("%Y%m%d")
        # DB에서 오늘의 운세 메시지 가져오기
        today_luck_msg = LuckMessage.objects.filter(luck_date=today, category='today').first()

        # 오늘의 운세 메시지가 존재한다면 푸시 알림 보내기
        if today_luck_msg:
            title = '오늘의 운세'
            body = today_luck_msg.luck_msg
        else:
            title = '오늘의 운세'
            body = '새벽 공기처럼 맑고 상쾌한 기운이 가득하길.🍃✨ 마음 가득 행복이 채워지는 날 되세요.🌷'
            push_logger.info(f"오늘의 운세 메시지가 존재하지 않습니다. today_luck_msg: {today_luck_msg} => 임의의 내용 작성: {body}")

        for i in range(0, len(ios_registration_tokens)):
            push_logger.info(f"Android 푸시용 리스트값: {ios_registration_tokens[i]}")
            # 푸시 알림 (notification -> 백그라운드)
            message = messaging.MulticastMessage( # 여러 기기에 메시지 전송
                notification=messaging.Notification(
                    title=title,
                    body=body,
                ),
                # IOS 알림 설정 (APNs, Apple Push Notification Service)
                apns=messaging.APNSConfig(
                    headers={
                        'apns-push-type': 'background', # 알림 유형 == 백그라운드
                        'apns-sound': 'default',
                        'apns-priority': '10', # 알림 우선순위 == 높음(10)
                    },
                    payload=messaging.APNSPayload( # Android의 data 설정 역할 (alert으로 뜨는 정보)
                        aps=messaging.Aps(
                            content_available=True,
                        ),
                    ),
                ),
                tokens = ios_registration_tokens, # 여러 개의 등록 토큰 리스트
            )

            # Firebase로 푸시 알림 전송
            response = messaging.send_each_for_multicast(message)
            push_logger.info(f"IOS 푸시 알림 발송 성공. Response_num[{i}]: 'title' = {title}, 'body' = {body}")

            time.sleep(push_term)

    except Exception as e:
        push_logger.error(f"IOS 푸시 알림 전송 중 오류 발생: {e}")
mingmingeee96 commented 3 months ago

아 지금 뭔가 프린트문 삭제하고 for문 주석 처리 삭제한게 push가 안된거 같은 느낌이,,,,,ㅎㅎ 다시 push 올려보겠습니다 ㅎㅎ