Inflearn brand logo image

인프런 커뮤니티 질문&답변

최우뚝님의 프로필 이미지
최우뚝

작성한 질문수

React Native with Expo: 제로초에게 제대로 배우기

배포가 이렇게 쉽다고...?

배포후 알람이 정상작동안합니다.

작성

·

78

0

안드로이드 환경에서 apk를 만들어서

 

다른사람의 폰에 깔아보았습니다

 

apk의 pushtoken을 서버에 잘 담아서 보냈으나,

expogo가 깔려있는앱에는 알람이 정상적으로 오지만, 깔려있지 않은앱에서는 알람이 안옵니다

어떻게 해결할수있을까요? 백엔드코드 전달드립니다.

 

// 푸시 알림 전송 함수 정의
function sendPushNotification($expoPushToken, $title, $body, $data = []) {
    $message = [
        'to' => $expoPushToken,
        'sound' => 'default',
        'title' => $title,
        'body' => $body,
        'data' => $data,
    ];

    $ch = curl_init('https://exp.host/--/api/v2/push/send');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Accept: application/json',
        'Accept-Encoding: gzip, deflate',
        'Content-Type: application/json',
    ]);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($message));

    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($httpCode != 200) {
        throw new Exception('HTTP 오류! 상태 코드: ' . $httpCode);
    }

    $result = json_decode($response, true);
    if ($result['data']['status'] === 'error') {
        throw new Exception('푸시 알림 전송 오류: ' . json_encode($result['data']['details']));
    }

    return $result['data']['id'];
}

에러내용 :

{"error":"InvalidCredentials","fault":"developer"}

답변 4

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

https://docs.expo.dev/push-notifications/fcm-credentials/

이 과정 진행하셨죠??

expo go가 있을 때만 푸쉬알림이 전송된다는게 뭔가 지금 앱이 아니라 expo go로 푸쉬알림을 전송하고 계신것 같은데요

expo go 앱 말고 apk로 설치한 푸쉬토큰이 서버에 저장된 것이 맞나 확인해보세요. 푸쉬토큰을 텍스트나 Alert로 확인해보시면 더 쉽습니다.

0

혹시 해결하셨을까요 ?
저도 expo go 환경에서는 api 호출이 정상적으로 이루어지는데,

빌드한 apk 파일을 설치해서 테스트 해보면 api 요청을 통해 데이터 받아오는 부분이 전부 작동을 안하고 있습니다.ㅠㅠ

최우뚝님의 프로필 이미지
최우뚝
질문자

안드로이드와 아이폰 둘다 production으로 하시고 apk 혹은 아이폰앱으로 설치 후

보낼때에도 백엔드에 production용으로 google or ios파일 잘들어가있나 확인하신후 보내면 정상적으로 알람이

갈거에요~

0

최우뚝님의 프로필 이미지
최우뚝
질문자

네 apk로 설치한 앱에서 pushtoken을 받아서(Notifications.getPermissionsAsync();) 서버에 저장하여 사용하고있습니다.

 

expogo가 깔린폰에서는 정상적으로 알람은 오고있습니다.

지금 앱이 아니라 expo go로 푸쉬알림을 전송하고 계신것 같은데요

=> 혹시 아래 코드가 잘못된걸까요?

$ch = curl_init('https://exp.host/--/api/v2/push/send');

 

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

아뇨 주소는 맞습니다. 다만 apk로 설치한 앱의 푸쉬토큰이 아니라 엑스포 고 앱의 푸쉬토큰을 서버에 저장하신게 아닌가 해서요. 그러니까 엑스포 고를 깔아야지만 알림이 오는 게 아닐까요?

최우뚝님의 프로필 이미지
최우뚝
질문자

옆자리에 있는 사람의 폰에서 apk로 깐 앱에서 회원가입해서 로그인하면

Notifications.getExpoPushTokenAsync(); 해당코드로 token을 가져오고

setPushToken(token.data); 그 토큰을 이렇게 저장하는데

혹시 getExpoPushToken이 잘못된걸까요?

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

토큰이 잘못된 것 같지는 않은데 InvalidCredentials 에러 자체는 FCM 설정 문제거든요. 그런데 일단 또 expo go가 있다고 하면 알림 자체는 오기도 하고

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

https://expo.dev/

여기에서 자신의 프로젝트 누르고 push notification 메뉴 가보면 실패한 것으로 뜨고 계신가요?

최우뚝님의 프로필 이미지
최우뚝
질문자

혹시 APK로 보내면 아래와 같이 보내야되는건아닐까요?

image.png


최우뚝님의 프로필 이미지
최우뚝
질문자

expo로 보내는건 expo 깔려져있는 안드로이드폰에서만 알람이 울리더라구요~

ExponentPushToken[-ky5fWKeQ2mNVJZdOzR0c0] : 알람울림 ( expogo 깔린폰에서 )

dvOvB9RTT1a78T-l3_JZQ2:APA91bFy7jiWpKfCdnpVJnR-f_J4nSd5Z11qbWn3AUMVCzKQ60J-iPQ25VnWQ9neMVn0XhhIC04aqSYIObAzDhJQLh0BD2JcWavVii1tGwdPk3ieItK2ebE : 알람 안울림 ( expogo 안깔린폰에서 )

0

안녕하세요, 인프런 AI 인턴입니다. 최우뚝님.

Expo로 만든 React Native 앱에서 푸시 알림이 제대로 작동하지 않는 문제는 여러 가지 원인으로 발생할 수 있습니다. 특히, 다른 사용자에게 APN 또는 FCM(예: Google Play Services) 요구 사항이 충족되지 않는 경우 문제가 될 수 있습니다. 지금 설명하신 오류 메시지 “InvalidCredentials”는 주로 자격 증명 문제를 나타낼 수 있습니다.

다음은 문제를 해결하는 데 도움이 될 수 있는 몇 가지 팁입니다:

1. Expo Push Token 화인

expoPushToken이 올바르게 생성되어 있는지 확인하세요. 토큰이 유효하지 않다면 알림이 전달되지 않습니다. Expo 클라이언트를 사용하지 않는 경우에도 FCM 토큰을 올바르게 설정해야 합니다.

2. Expo 서버 인증 확인

Expo 서버에 대한 인증이 정확히 설정되어 있는지 확인해보세요. Expo 서버 사용을 위한 API 키 또는 자격 증명이 있다면, 그것이 정확히 설정되어 있는지 검토해야 합니다.

3. FCM 설정 확인

안드로이드 기기에서 FCM을 사용한다면, Firebase Console에서 올바르게 설정되었는지, Google Services JSON 파일이 프로젝트에 포함되어 있는지 확인하세요.

4. Expo Eject 확인

Expo로 앱을 빌드한 후 Eject한 상태라면, 푸시 알림 설정이 네이티브 환경(Android/iOS)에서도 제대로 이식되었는지 확인하세요.

유사한 문제 해결 참조 링크

다음 링크에서 관련한 문제 해결법들을 확인할 수 있습니다:

일단은 위의 확인 사항들을 체크해보시고, 필요하다면 인증 정보를 다시 생성하거나 Expo 프로젝트 설정을 다시 점검해보세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

최우뚝님의 프로필 이미지
최우뚝

작성한 질문수

질문하기