diff --git a/src/components/NajvaToken.tsx b/src/components/NajvaToken.tsx index 9f2d3bd..2508a5a 100644 --- a/src/components/NajvaToken.tsx +++ b/src/components/NajvaToken.tsx @@ -10,31 +10,61 @@ declare global { } } } -const NajvaToken: FC = () => { +const NajvaToken: FC = () => { const { pathname } = useLocation() const [isNajvaToken, setIsNajvaToken] = useState(false) + const [retryCount, setRetryCount] = useState(0) const handleNajvaToken = async () => { - const userToken = await window.NAJVA?.getUserToken() - if (userToken) { - updateProfile({ - pushToken: userToken, - }) - setIsNajvaToken(true) - } else { - console.log('userToken is null') + try { + console.log('تلاش برای دریافت توکن Najva...', { retryCount }) + + // بررسی وجود window.NAJVA + if (!window.NAJVA) { + console.log('window.NAJVA موجود نیست') + return false + } + + console.log('window.NAJVA موجود است، در حال دریافت توکن...') + const userToken = await window.NAJVA.getUserToken() + + console.log('توکن دریافت شده:', userToken ? 'موجود' : 'خالی') + + if (userToken) { + console.log('در حال ارسال توکن به سرور...') + await updateProfile({ + pushToken: userToken, + }) + setIsNajvaToken(true) + console.log('توکن با موفقیت ارسال شد') + return true + } else { + console.log('توکن خالی است') + return false + } + } catch (error) { + console.error('خطا در دریافت توکن Najva:', error) + return false + } + } + + const tryGetToken = async () => { + const success = await handleNajvaToken() + + if (!success && retryCount < 5) { + console.log(`تلاش مجدد در ${(retryCount + 1) * 1000}ms...`) + setTimeout(() => { + setRetryCount(prev => prev + 1) + }, (retryCount + 1) * 1000) // 1s, 2s, 3s, 4s, 5s } } useEffect(() => { if (!isNajvaToken) { - handleNajvaToken() + tryGetToken() } - // window.NAJVA.najvaUserSubscribed = function (najvaUserToken) { - // console.log('najvaUserToken', najvaUserToken) - // } - }, [pathname, isNajvaToken]) + }, [pathname, isNajvaToken, retryCount]) return null }