BanglaTech

© 2026 Bangla Technologies. সর্বস্বত্ব সংরক্ষিত.

একটিNerddevs Ltd-এর প্রোডাক্ট
হোমঅনুসন্ধানআমাদের সম্পর্কেটিউটোরিয়ালশিক্ষকদের জন্যকোচিং সেন্টারের জন্যগোপনীয়তা নীতিসেবার শর্তাবলি
TWAPWAGoogle Sign-InOAuthAndroidCookie PartitioningBubblewrapWeb Developmentওয়েব ডেভেলপমেন্ট

TWA-তে Google Sign-In কেন কাজ করে না: Cookie Partitioning সমস্যা ও সমাধান

M
Md Delwar Hossain
May 13, 2026 · 143 views
TWA-তে Google Sign-In কেন কাজ করে না: Cookie Partitioning সমস্যা ও সমাধান
~4 মিনিট পড়তে
16px

আপনি যদি কখনো একটি Progressive Web App (PWA) তৈরি করে সেটিকে Trusted Web Activity (TWA) হিসেবে Google Play Store-এ পাঠিয়ে থাকেন, তাহলে এই সমস্যাটির সাথে আপনার পরিচয় হওয়ার সম্ভাবনা প্রবল। ওয়েবসাইটে “Continue with Google” বাটন একদম ঠিকঠাক কাজ করছে, কিন্তু একই কোড TWA অ্যাপে গিয়ে ভেঙে পড়ছে — সাইন-ইন শেষ হওয়ার পরই সাদা স্ক্রিন, কিংবা সরাসরি লগইন পেজে ফিরে আসা। সমস্যাটা আপনার কোডে না, সমস্যাটা Android-এর process model-এ। চলুন গভীরে যাওয়া যাক।

TWA, Wrapper, Bubblewrap — আসলে এগুলো কী?

প্রথমে কয়েকটা শব্দ পরিষ্কার করে নিই। TWA (Trusted Web Activity) হলো Google-এর অফিসিয়াল পদ্ধতি — যাতে আপনি একটি PWA-কে Play Store-এর মাধ্যমে এমনভাবে ডিস্ট্রিবিউট করতে পারেন যেন এটি একটি native Android অ্যাপ। কিন্তু আসল কথা হলো, এটি native নয়। এর ভেতরে Chrome আপনার ওয়েবসাইটকে fullscreen-এ রেন্ডার করছে, শুধু URL বার আর Chrome-এর অন্যান্য UI লুকিয়ে রাখা হয়েছে।

Bubblewrap হলো সেই কমন টুল যেটা দিয়ে একটি PWA URL-কে TWA APK-তে রূপান্তর করা হয়। আর “Wrapper” শব্দটা একটা সাধারণ ধারণা — WebView-নির্ভর wrapper (Capacitor, Cordova, React Native WebView, কিংবা custom Android WebView), TWA, এই সবগুলোই wrapper-এর উদাহরণ।

Cookie Partitioning: আসল সমস্যা কোথায়?

Cookie সাধারণত origin অনুযায়ী scoped হয় — dujone.com-এর cookie আর google.com-এর cookie আলাদা জায়গায় সংরক্ষিত হয়। এটা স্বাভাবিক browser আচরণ, কোনো সমস্যা না।

আসল সমস্যা হলো: TWA এবং Chrome-এর Custom Tabs একই origin-এর জন্যও আলাদা cookie store ব্যবহার করে। একটু কল্পনা করুন — Chrome dujone.com-এর জন্য দুটি সম্পূর্ণ আলাদা cookie জার বানিয়ে রাখছে: একটি TWA process-এর জন্য, আরেকটি Custom Tab popup-এর জন্য।

ধাপে ধাপে দেখুন TWA-এর ভেতরে “Continue with Google” বাটনে ট্যাপ করলে কী ঘটে:

১. Google Sign-In বাটন ux_mode: 'popup' ব্যবহার করে, যা window.open() call করে Google-এর auth স্ক্রিন খোলে।

২. TWA-এর ভেতরে window.open কোনো new tab খোলে না — এটি একটি Chrome Custom Tab spawn করে, যা একটি আলাদা Android activity।

৩. ব্যবহারকারী সেখানে সাইন-ইন করেন। Google redirect করে, এবং আপনার backend-এর /auth/google endpoint Set-Cookie header-এর মাধ্যমে accessToken ও refreshToken cookie সেট করে। এই cookie জমা হয় Custom Tab-এর cookie জারে।

৪. Popup বন্ধ হয়। Control আবার TWA-তে ফিরে আসে। TWA তার প্রথম authenticated request — যেমন /users/me — পাঠায় এবং auth cookie খোঁজে।

৫. কিন্তু সেই cookie তো Custom Tab-এর জারে। TWA-এর নিজের জার একদম খালি। Server 401 ফেরত পাঠায়, redirect logic চালু হয়, এবং আপনি গিয়ে দাঁড়ান /auth/login পেজে — মাঝখানে সাদা স্ক্রিন, কারণ SPA-এর state অর্ধেক resolve হয়েছে এবং layout-এর loading skeleton redirect-এর সাথে দৌড়াদৌড়ি করছে।

এটাই Cookie Partitioning। উল্লেখ্য, এই শব্দটি ব্রাউজার storage privacy feature-এর প্রসঙ্গেও ব্যবহৃত হয় (যেখানে third-party cookie top-site অনুযায়ী partition করা হয়) — কিন্তু এখানে সমস্যাটা সেটা না। এখানে Android-এর process model প্রতিটি app component-কে আলাদা cookie store রাখতে বাধ্য করছে।

একই কোড সাধারণ Chrome-এ কাজ করে কেন?

কারণ Android-এর সাধারণ Chrome ব্রাউজারে পুরোটাই একটি Chrome process। Popup আর main tab — দুটোই একই cookie জার share করে। তাই আপনার dev টেস্টিং-এ সবকিছু ঠিক দেখায়, কিন্তু Play Store থেকে TWA install করে test করলেই সমস্যা ধরা পড়ে।

তিনটি পরীক্ষিত সমাধান

কাজের পরিমাণের ক্রমানুসারে তিনটি সমাধান —

১. TWA-তে Google সাইন-ইন অপশন লুকিয়ে দিন। সবচেয়ে practical। navigator.userAgent-এ TWA detect করে শুধু email/password login দেখান। Play Store review delay নেই, কোনো backend পরিবর্তন নেই, এক রাতেই ship করা সম্ভব।

২. ux_mode: 'redirect' ব্যবহার করুন popup-এর বদলে। Google redirect-এর মাধ্যমে TWA-এর নিজের origin-এ ফিরে আসবে, তাই auth flow পুরোটাই TWA-এর নিজের cookie জারে ঘটবে। SPA-এর কিছু in-memory state হারাবে redirect-এর সময়, কিন্তু cookie সঠিক জায়গায় বসবে।

৩. Wrapper-এ Native Google Sign-In SDK integrate করুন। Android wrapper native picker খুলবে, credential নেবে, তারপর evaluateJavascript বা JavaScript interface-এর মাধ্যমে সেটা webview-এ পাঠাবে। সবচেয়ে robust সমাধান, কিন্তু প্রতিবার Android binary update করে Play Store-এ পাঠাতে হবে।

শেষ কথা

TWA একটি দারুণ সুবিধা — ওয়েব কোড দিয়েই Play Store presence পাওয়া যায়। কিন্তু এটা আসলে wrapper, এবং wrapper-এর কিছু process-level সীমাবদ্ধতা আছে যা ওয়েবে কখনো দেখা যায় না। Cookie partitioning তেমনই একটি সীমাবদ্ধতা। আপনি যদি TWA বা যেকোনো WebView wrapper দিয়ে কাজ করেন এবং OAuth popup ব্যবহার করেন — আগে থেকেই plan করে রাখুন, কোন সমাধান আপনার ব্যবহারকারীর জন্য সবচেয়ে ভালো।

আরও দেখুন

🏆
কুইজ প্রতিযোগিতায় অংশ নিন
ফ্রি অনলাইন কুইজ, জিতুন পুরস্কার।
✏️
নিজে কুইজ তৈরি করুন
শিক্ষক ও টিউটরদের জন্য ফ্রি টুলস।
✨
BanglaTech সম্পর্কে
আমাদের গল্প ও মিশন।

Comments (0)

Login to leave a comment.