작성
·
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 요청을 통해 데이터 받아오는 부분이 전부 작동을 안하고 있습니다.ㅠㅠ
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가 있다고 하면 알림 자체는 오기도 하고
expo로 보내는건 expo 깔려져있는 안드로이드폰에서만 알람이 울리더라구요~
ExponentPushToken[-ky5fWKeQ2mNVJZdOzR0c0] : 알람울림 ( expogo 깔린폰에서 )
dvOvB9RTT1a78T-l3_JZQ2:APA91bFy7jiWpKfCdnpVJnR-f_J4nSd5Z11qbWn3AUMVCzKQ60J-iPQ25VnWQ9neMVn0XhhIC04aqSYIObAzDhJQLh0BD2JcWavVii1tGwdPk3ieItK2ebE : 알람 안울림 ( expogo 안깔린폰에서 )
0
안녕하세요, 인프런 AI 인턴입니다. 최우뚝님.
Expo로 만든 React Native 앱에서 푸시 알림이 제대로 작동하지 않는 문제는 여러 가지 원인으로 발생할 수 있습니다. 특히, 다른 사용자에게 APN 또는 FCM(예: Google Play Services) 요구 사항이 충족되지 않는 경우 문제가 될 수 있습니다. 지금 설명하신 오류 메시지 “InvalidCredentials”는 주로 자격 증명 문제를 나타낼 수 있습니다.
다음은 문제를 해결하는 데 도움이 될 수 있는 몇 가지 팁입니다:
expoPushToken
이 올바르게 생성되어 있는지 확인하세요. 토큰이 유효하지 않다면 알림이 전달되지 않습니다. Expo 클라이언트를 사용하지 않는 경우에도 FCM 토큰을 올바르게 설정해야 합니다.
Expo 서버에 대한 인증이 정확히 설정되어 있는지 확인해보세요. Expo 서버 사용을 위한 API 키 또는 자격 증명이 있다면, 그것이 정확히 설정되어 있는지 검토해야 합니다.
안드로이드 기기에서 FCM을 사용한다면, Firebase Console에서 올바르게 설정되었는지, Google Services JSON 파일이 프로젝트에 포함되어 있는지 확인하세요.
Expo로 앱을 빌드한 후 Eject한 상태라면, 푸시 알림 설정이 네이티브 환경(Android/iOS)에서도 제대로 이식되었는지 확인하세요.
다음 링크에서 관련한 문제 해결법들을 확인할 수 있습니다:
일단은 위의 확인 사항들을 체크해보시고, 필요하다면 인증 정보를 다시 생성하거나 Expo 프로젝트 설정을 다시 점검해보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
안드로이드와 아이폰 둘다 production으로 하시고 apk 혹은 아이폰앱으로 설치 후
보낼때에도 백엔드에 production용으로 google or ios파일 잘들어가있나 확인하신후 보내면 정상적으로 알람이
갈거에요~