এই পৃষ্ঠা থেকে আপনি Crashlytics ব্যবহার করার ব্যাপারে সমস্যার সমাধানকরণ সংক্রান্ত সহায়তা ও প্রায়শই জিজ্ঞাসিত প্রশ্নের উত্তর পাবেন। আপনি যা খুঁজছেন তা খুঁজে না পেলে বা অতিরিক্ত সাহায্যের প্রয়োজন হলে, Firebase সহায়তা টিমের সাথে যোগাযোগ করুন।
এই পৃষ্ঠায়, আপনি নিম্নলিখিত ধরনের বিষয় সম্পর্কে তথ্য পাবেন:
সাধারণ সমস্যার সমাধানকরণ, যার মধ্যে ডেটা দেখানো বা Firebase কনসোলে ডেটা নিয়ে কাজ করা এবং রিগ্রেশন সংক্রান্ত সমস্যা সম্পর্কে প্রশ্ন অন্তর্ভুক্ত।
প্ল্যাটফর্ম-নির্দিষ্ট সহায়তা, যার মধ্যে Apple প্ল্যাটফর্ম, Android, ওয়েব এবং Unity-এর মতো নির্দিষ্ট প্ল্যাটফর্মের প্রশ্ন অন্তর্ভুক্ত।
ইন্টিগ্রেশন সংক্রান্ত সহায়তা, যার মধ্যে BigQuery সম্পর্কে প্রশ্নও অন্তর্ভুক্ত।
সাধারণ সমস্যা সমাধান/FAQ
সমস্যা টেবিলে কিছু সমস্যার জন্য বিভিন্ন ফর্ম্যাট (এবং কখনও কখনও "ভেরিয়েন্ট") দেখা
Firebase কনসোলের সমস্যা সারণীতে তালিকাভুক্ত সমস্যার জন্য আপনি দুটি ভিন্ন ফর্ম্যাট লক্ষ্য করতে পারেন। এছাড়াও, আপনার কিছু সমস্যার মধ্যে "ভেরিয়েন্ট" নামক ফিচার দেখতে পেতে পারেন। কারণটা এখানে দেওয়া হল!
২০২৩ সালের শুরুতে, আমরা ইভেন্ট গ্রুপ করার জন্য একটি উন্নত বিশ্লেষণ ইঞ্জিন চালু করেছি পাশাপাশি নতুন সমস্যার জন্য একটি আপডেট করা ডিজাইন এবং কিছু উন্নত ফিচার (যেমন ভেরিয়েন্ট!)। সব বিবরণ জানতে আমাদের সাম্প্রতিক ব্লগ পোস্ট দেখুন, তবে আপনি হাইলাইটগুলি নিচে পড়তে পারেন।
Crashlytics আপনার অ্যাপের সব ইভেন্ট (যেমন ক্র্যাশ, নন-ফেটাল ও ANR) বিশ্লেষণ করে এবং সমস্যা নামে ইভেন্টের গ্রুপ তৈরি করে — কোনও সমস্যার সব ইভেন্টের একটি সাধারণ ব্যর্থতার পয়েন্ট থাকে।
এইসব সমস্যার মধ্যে ইভেন্টগুলিকে গ্রুপ করতে, উন্নত বিশ্লেষণ ইঞ্জিন এখন ইভেন্টের অনেক দিক দেখে, যার মধ্যে রয়েছে স্ট্যাক ট্রেসের ফ্রেম, ব্যতিক্রম মেসেজ, ত্রুটি কোড এবং অন্যান্য প্ল্যাটফর্ম বা ত্রুটির ধরন সংক্রান্ত বৈশিষ্ট্য।
তবে, ইভেন্টের এই গ্রুপের মধ্যে, ব্যর্থতার দিকে নিয়ে যাওয়া স্ট্যাক ট্রেস আলাদা হতে পারে। আলাদা স্ট্যাক ট্রেস মানে আলাদা মূল কারণ হতে পারে। কোনও সমস্যার মধ্যে এই সম্ভাব্য পার্থক্য দেখানোর জন্য, আমরা এখন সমস্যার মধ্যে ভেরিয়েন্ট তৈরি করি - প্রতিটি ভেরিয়েন্ট হল কোনও সমস্যার মধ্যে ইভেন্টের সাব-গ্রুপ যেগুলির একই ব্যর্থতার পয়েন্ট এবং একই ধরনের স্ট্যাক ট্রেস আছে। ভেরিয়েন্টের সাহায্যে, আপনি কোনও সমস্যার মধ্যে সবচেয়ে সাধারণ স্ট্যাক ট্রেস ডিবাগ করতে পারবেন এবং বিভিন্ন মূল কারণের জন্য সমস্যা হচ্ছে কিনা তা নির্ধারণ করতে পারবেন।
এইসব উন্নতির ফলে আপনি যা অভিজ্ঞতা পাবেন তা এখানে দেওয়া হল:
সমস্যার সারিতে নতুনভাবে সাজানো মেটাডেটা দেখানো হয়েছে
আপনার অ্যাপে সমস্যা বোঝা এবং ট্রায়াজ করা এখন আরও সহজ।ডুপ্লিকেট সমস্যা কম হয়
লাইন নম্বর পরিবর্তন করলে নতুন সমস্যা তৈরি হয় না।বিভিন্ন মূল কারণ সহ জটিল সমস্যার আরও সহজ ডিবাগিং
কোনও সমস্যার মধ্যে সবচেয়ে সাধারণ স্ট্যাক ট্রেস ডিবাগ করতে ভেরিয়েন্ট ব্যবহার করুন।আরও অর্থপূর্ণ সতর্কতা ও সিগন্যাল
নতুন সমস্যা আসলে নতুন বাগকেই বোঝায়।আরও শক্তিশালী সার্চ
প্রতিটি সমস্যার সাথে আরও সার্চযোগ্য মেটাডেটা থাকে, যেমন ব্যতিক্রমের ধরন এবং প্যাকেজের নাম।
এইসব উন্নতি কীভাবে প্রকাশ করা হচ্ছে তা এখানে দেওয়া হল:
আপনার অ্যাপ থেকে নতুন ইভেন্ট পেলে, আমরা চেক করে দেখব যে সেটি আগে থেকে থাকা কোনও সমস্যার সাথে ম্যাচ করছে কিনা।
কোনও মিল না থাকলে, আমরা অটোমেটিক ইভেন্টে আমাদের আরও স্মার্ট ইভেন্ট-গ্রুপিং অ্যালগরিদম প্রয়োগ করব এবং নতুন করে সাজানো মেটাডেটা ডিজাইনের সাথে একটি নতুন সমস্যা তৈরি করব।
ইভেন্ট গ্রুপিংয়ের ক্ষেত্রে এটিই প্রথম বড় আপডেট। আপনার কোনও মতামত থাকলে বা কোনও সমস্যার সম্মুখীন হলে, রিপোর্ট ফাইল করে আমাদের জানান।
ব্রেডক্রাম্ব লগ দেখতে পাচ্ছি না
আপনি ব্রেডক্রাম্ব লগ দেখতে না পেলে (iOS+ | Android | Flutter | Unity), আমরা সাজেস্ট করি যে Google Analytics-এর জন্য আপনার অ্যাপের কনফিগারেশন চেক করুন। নিম্নলিখিত প্রয়োজনীয়তা পূরণ করেছেন কিনা তা ভালোভাবে দেখে নিন:
আপনার Firebase প্রোজেক্টে Google Analytics চালু করেছেন।
আপনি Google Analytics-এর জন্য ডেটা শেয়ারিং চালু করেছেন। আপনার Analytics ডেটা শেয়ারিং সেটিংস ম্যানেজ করুন লিঙ্কে গিয়ে এই সেটিংস সম্পর্কে আরও জানুন
আপনি Google Analytics-এর জন্য Firebase SDK আপনার অ্যাপে যোগ করেছেন: iOS+ | Android | Flutter | Unity.
এই SDK অবশ্যই Crashlytics SDK-এর পাশাপাশি যোগ করতে হবে।আপনার অ্যাপে ব্যবহার করা সব প্রোডাক্টের জন্য আপনি লেটেস্ট Firebase SDK ভার্সন ব্যবহার করছেন (iOS+ | Android | Flutter | Unity)।
Apple প্ল্যাটফর্ম ও Android অ্যাপের ক্ষেত্রে, বিশেষ করে চেক করে নিন যে আপনি Google Analytics-এর জন্য Firebase SDK-এর নিম্নলিখিত ভার্সন কমপক্ষে ব্যবহার করছেন:
iOS+ — v6.3.1+ (macOS ও tvOS-এর জন্য v8.9.0+) |Android — v17.2.3+ (BoM v24.7.1+) .
গতিবেগ সংক্রান্ত সতর্কতা দেখতে পাচ্ছি না
আপনি যদি ভেলোসিটি অ্যালার্ট দেখতে না পান, তাহলে নিশ্চিত করুন যে আপনি
Crashlytics সতর্কতা (অনুমতি) পাচ্ছেন না
Crashlytics সতর্কতা পেতে বা কনফিগার করতে, প্রোজেক্ট মেম্বারদের অবশ্যই
প্রয়োজনীয় IAM অনুমতি থাকতে হবে। আপনি Firebase কনসোলের
নিম্নলিখিত সারণীতে প্রয়োজনীয় অনুমতি এবং আগে থেকে নির্ধারিত ভূমিকা উল্লেখ করা হল যেগুলিতে ডিফল্ট হিসেবে সেইসব অনুমতি অন্তর্ভুক্ত থাকে:
| বৈশিষ্ট্য | সতর্কতা পেতে প্রয়োজনীয় অনুমতি | ডিফল্ট হিসেবে প্রয়োজনীয় অনুমতি অন্তর্ভুক্ত আছে এমন ভূমিকা |
|---|---|---|
| Crashlytics - মোবাইল অ্যাপ সংক্রান্ত সতর্কতা | firebase.projects.update |
|
| Crashlytics - ওয়েব অ্যাপ সংক্রান্ত সতর্কতা |
|
সতর্কতা কনফিগার করা সম্পর্কে আরও তথ্যের জন্য, Crashlytics সতর্কতা কনফিগার করুন এবং পান দেখুন। IAM ভূমিকা ও অনুমতি সম্পর্কে আরও জানতে, Firebase-এ অনুমতি ও অ্যাক্সেস দেখুন।
ক্র্যাশ-ফ্রি মেট্রিক দেখতে পাচ্ছেন না (অথবা নির্ভরযোগ্য নয় এমন মেট্রিক দেখতে পাচ্ছেন)
আপনি যদি ক্র্যাশ-ফ্রি মেট্রিক (যেমন ক্র্যাশ-ফ্রি ব্যবহারকারী এবং সেশন) না দেখেন বা অবিশ্বস্ত মেট্রিক দেখেন, তাহলে নিম্নলিখিতগুলি চেক করুন:
আপনি এগুলি ব্যবহার করছেন কিনা তা নিশ্চিত করুন:
আপনার ডেটা সংগ্রহের সেটিংস ক্র্যাশ-ফ্রি মেট্রিক্সের কোয়ালিটিকে প্রভাবিত করছে কিনা তা দেখে নিন:
আপনি যদি অটোমেটিক ক্র্যাশ রিপোর্টিং বন্ধ করে অপ্ট-ইন রিপোর্টিং চালু করেন, তাহলে ক্র্যাশ সংক্রান্ত তথ্য শুধুমাত্র সেইসব ব্যবহারকারীর থেকে Crashlytics-এ পাঠানো যাবে যারা ডেটা সংগ্রহে স্পষ্টভাবে অপ্ট-ইন করেছেন। তাই, ক্র্যাশ-ফ্রি মেট্রিক্সের নির্ভুলতা প্রভাবিত হবে কারণ Crashlytics-এর কাছে শুধুমাত্র এইসব অপ্ট-ইন করা ব্যবহারকারীদের ক্র্যাশ সংক্রান্ত তথ্য আছে (আপনার সব ব্যবহারকারীর পরিবর্তে)। এর অর্থ হল, আপনার ক্র্যাশ-ফ্রি মেট্রিক কম নির্ভরযোগ্য হতে পারে এবং আপনার অ্যাপের সামগ্রিক স্থিতিশীলতা কম প্রতিফলিত হতে পারে।
আপনি অটোমেটিক ডেটা সংগ্রহ করার সুবিধা বন্ধ করে রাখলে, Crashlytics-এ অন-ডিভাইস ক্যাশে করা রিপোর্ট পাঠাতে
sendUnsentReportsব্যবহার করতে পারবেন। এই পদ্ধতি ব্যবহার করলে ক্র্যাশ ডেটা Crashlytics-এ পাঠানো হবে, কিন্তু সেশন ডেটা পাঠানো হবে না, যার ফলে ক্র্যাশ-ফ্রি মেট্রিকের জন্য কনসোল চার্টে কম বা শূন্য ভ্যালু দেখানো হবে।
ক্র্যাশ-ফ্রি ব্যবহারকারীর সংখ্যা কীভাবে গণনা করা হয়?
ক্র্যাশ-ফ্রি মেট্রিক বোঝা দেখুন।
কোনও সমস্যার ব্যাপারে কে নোট দেখতে, লিখতে ও মুছে দিতে পারবেন?
নোটের মাধ্যমে প্রোজেক্টের মেম্বাররা প্রশ্ন, স্ট্যাটাস আপডেট ইত্যাদির মাধ্যমে নির্দিষ্ট সমস্যা সম্পর্কে কমেন্ট করতে পারেন।
প্রোজেক্টের কোনও মেম্বার নোট পোস্ট করলে, তার Google অ্যাকাউন্টের ইমেল আইডি দিয়ে সেটি লেবেল করা হয়। এই ইমেল আইডি, নোটের সাথে, নোট দেখার অ্যাক্সেস আছে এমন সব প্রোজেক্ট মেম্বারদের কাছে দৃশ্যমান।
নোট দেখতে, লিখতে ও মুছে দিতে কী কী অ্যাক্সেস প্রয়োজন তা নিচে বর্ণনা করা হল:
নিম্নলিখিত যেকোনও ভূমিকা সহ প্রোজেক্ট মেম্বাররা আগে থেকে থাকা নোট দেখতে ও মুছে ফেলতে এবং কোনও সমস্যার বিষয়ে নতুন নোট লিখতে পারবেন।
- প্রোজেক্টের মালিক বা এডিটর, Firebase অ্যাডমিন, কোয়ালিটি অ্যাডমিন, অথবা Crashlytics অ্যাডমিন
নিম্নলিখিত যেকোনও ভূমিকায় থাকা প্রোজেক্ট মেম্বাররা কোনও সমস্যার উপর পোস্ট করা নোট দেখতে পারবেন, কিন্তু তারা নোট মুছতে বা লিখতে পারবেন না।
- প্রোজেক্ট Viewer, Firebase Viewer, Quality Viewer, অথবা Crashlytics Viewer
রিগ্রেসড সমস্যা বলতে কী বোঝায়?
আপনি আগে কোনও সমস্যা বন্ধ করে দেওয়ার পরেও যদি Crashlytics-এর কাছে নতুন রিপোর্ট আসে যে সমস্যাটি আবার দেখা দিয়েছে, তাহলে সেটিকে রিগ্রেশন হিসেবে চিহ্নিত করে। Crashlytics অটোমেটিক এইসব রিগ্রেসড সমস্যা আবার খুলে দেয় যাতে আপনি আপনার অ্যাপের জন্য উপযুক্তভাবে সেগুলির সমাধান করতে পারেন।
এখানে একটি উদাহরণ দেওয়া হল যা থেকে বোঝা যাবে যে Crashlytics কীভাবে কোনও সমস্যাকে রিগ্রেশন হিসেবে শ্রেণীবদ্ধ করে:
- প্রথমবার, Crashlytics ক্র্যাশ "A" সম্পর্কে ক্র্যাশ রিপোর্ট পায়। Crashlytics সেই ক্র্যাশের জন্য একটি সংশ্লিষ্ট সমস্যা খোলে (সমস্যা "A")।
- আপনি দ্রুত এই সমস্যার সমাধান করে, সমস্যা "ক" বন্ধ করে দেন এবং তারপরে আপনার অ্যাপের একটি নতুন ভার্সন রিলিজ করেন।
- আপনি সমস্যাটি বন্ধ করার পরে Crashlytics, "ক" সমস্যা সম্পর্কে আরেকটি রিপোর্ট পায়।
- আপনি সমস্যাটি বন্ধ করার সময় (অর্থাৎ, ভার্সনটি যেকোনও ক্র্যাশের জন্য ক্র্যাশ রিপোর্ট পাঠিয়েছিল) Crashlytics যেটি সম্পর্কে জানত, রিপোর্টটি যদি সেই অ্যাপ ভার্সন থেকে আসে, তাহলে Crashlytics সমস্যাটিকে রিগ্রেশন হিসেবে বিবেচনা করবে না। সমস্যাটি বন্ধই থাকবে।
- আপনি যখন সমস্যাটি বন্ধ করেছিলেন তখন যদি রিপোর্টটি এমন একটি অ্যাপ ভার্সন থেকে আসে যা Crashlytics জানত না (অর্থাৎ, ভার্সনটি কখনও কোনও ক্র্যাশের জন্য কোনও ক্র্যাশ রিপোর্ট পাঠায়নি), তাহলে Crashlytics সমস্যাটিকে রিগ্রেসড হিসেবে বিবেচনা করে এবং সমস্যাটি আবার খুলবে।
কোনও সমস্যা রিগ্রেস করলে, আমরা রিগ্রেশন শনাক্তকরণ সংক্রান্ত সতর্কতা পাঠাই এবং সমস্যায় রিগ্রেশন সিগন্যাল যোগ করি যাতে আপনি জানতে পারেন যে Crashlytics সমস্যাটি আবার খুলেছে। আমাদের রিগ্রেশন অ্যালগরিদমের কারণে আপনি যদি কোনও সমস্যা আবার খুলতে না চান, তাহলে সমস্যাটি বন্ধ করার পরিবর্তে "মিউট" করুন।
আমি কেন অ্যাপের পুরনো ভার্সনের জন্য রিগ্রেসড সমস্যা দেখতে পাচ্ছি?
আপনি সমস্যাটি বন্ধ করার সময় যদি কোনও রিপোর্ট এমন একটি পুরানো অ্যাপ ভার্সন থেকে আসে যা কখনও কোনও ক্র্যাশ রিপোর্ট পাঠায়নি, তাহলে Crashlytics সমস্যাটিকে রিগ্রেসড বলে বিবেচনা করে এবং সমস্যাটি আবার খুলবে।
এই পরিস্থিতি নিম্নলিখিত কারণে হতে পারে: আপনি কোনও সমস্যার সমাধান করে অ্যাপের নতুন ভার্সন রিলিজ করেছেন, কিন্তু এখনও কিছু ব্যবহারকারী আগের ভার্সন ব্যবহার করছেন যেখানে সমস্যার সমাধান করা হয়নি। যদি, কোনও কারণে, আপনি সমস্যাটি বন্ধ করার সময় সেই আগের ভার্সনগুলির মধ্যে একটিও ক্র্যাশ রিপোর্ট না পাঠিয়ে থাকে এবং সেই ব্যবহারকারীরা বাগটি দেখতে শুরু করেন, তাহলে সেই ক্র্যাশ রিপোর্টগুলি একটি রিগ্রেসড সমস্যা ট্রিগার করবে।
আমাদের রিগ্রেশন অ্যালগরিদমের কারণে আপনি যদি কোনও সমস্যা আবার খুলতে না চান, তাহলে সমস্যাটি বন্ধ করার পরিবর্তে "মিউট" করুন।
প্ল্যাটফর্ম-নির্দিষ্ট সহায়তা
নিম্নলিখিত বিভাগগুলি প্ল্যাটফর্ম-নির্দিষ্ট সমস্যা সমাধান এবং প্রায়শই জিজ্ঞাসিত প্রশ্নের জন্য সহায়তা প্রদান করে: iOS+ | Android | Web | Unity.
Apple প্ল্যাটফর্ম সহায়তা
dSYMs নেই/আপলোড হচ্ছে না
আপনার প্রোজেক্টের dSYM আপলোড করতে এবং ভার্বোস আউটপুট পেতে, নিম্নলিখিত বিষয়গুলি চেক করুন:
আপনার প্রোজেক্টের বিল্ড ফেজে Crashlytics রান স্ক্রিপ্ট আছে কিনা তা ভাল করে দেখে নিন, যা Xcode-কে বিল্ড করার সময় আপনার প্রোজেক্টের dSYMs আপলোড করার অনুমতি দেয় (স্ক্রিপ্ট যোগ করার ব্যাপারে নির্দেশাবলী পেতে Crashlytics ইনিশিয়ালাইজ করা পড়ুন)। আপনার প্রোজেক্ট আপডেট করার পরে, ক্র্যাশ করতে বাধ্য করুন এবং কনফার্ম করুন যে ক্র্যাশটি Crashlytics ড্যাশবোর্ডে দেখা যাচ্ছে।
Firebase কনসোলে "dSYM নেই" সংক্রান্ত সতর্কতা দেখতে পেলে, Xcode চেক করে দেখুন যে এটি বিল্ডের জন্য সঠিকভাবে dSYM তৈরি করছে কিনা।
Xcode যদি সঠিকভাবে dSYMs তৈরি করে এবং আপনি এখনও dSYMs দেখতে না পান, তাহলে dSYMs আপলোড করার সময় রান স্ক্রিপ্ট টুলটি আটকে যাওয়ার সম্ভাবনা রয়েছে। এই ক্ষেত্রে, নিম্নলিখিত প্রতিটি ধাপ অনুসরণ করে দেখুন:
আপনি Crashlytics-এর লেটেস্ট ভার্সন ব্যবহার করছেন কিনা তা নিশ্চিত করুন।
বাদ পড়ে যাওয়া dSYM ফাইল ম্যানুয়ালি আপলোড করুন:
- বিকল্প ১: কনসোল-ভিত্তিক "টেনে এনে রাখুন" বিকল্প ব্যবহার করে dSYMs ট্যাবে অনুপস্থিত dSYM ফাইল সহ একটি জিপ আর্কাইভ আপলোড করুন।
- বিকল্প ২: dSYMs ট্যাবে
প্রদান করা UUID-এর জন্য, অনুপস্থিত dSYM ফাইল আপলোড করতে
upload-symbolsস্ক্রিপ্ট ব্যবহার করুন।
আপনি যদি এখনও dSYMs দেখতে না পান বা আপলোড এখনও সফল না হয়, Firebase সহায়তা টিমের সাথে যোগাযোগ করুন এবং আপনার লগ অন্তর্ভুক্ত করতে ভুলবেন না।
ক্র্যাশগুলি খারাপভাবে সিম্বলিক করা হয়েছে
আপনার স্ট্যাক ট্রেস যদি খারাপভাবে সিম্বল করা হয়েছে বলে মনে হয়, তাহলে নিম্নলিখিতগুলি চেক করুন:
আপনার অ্যাপের লাইব্রেরির ফ্রেমগুলিতে আপনার অ্যাপের কোডের রেফারেন্স না থাকলে, নিশ্চিত করুন যে
কম্পাইলেশন ফ্ল্যাগ হিসেবে সেট করা নেই।-fomit-frame-pointerআপনার অ্যাপের লাইব্রেরির জন্য একাধিক
(Missing)ফ্রেম দেখতে পেলে, Firebase কনসোলের Crashlytics dSYMs ট্যাবে (প্রভাবিত অ্যাপ ভার্সনের জন্য) ঐচ্ছিক dSYMs মিসিং হিসেবে তালিকাভুক্ত আছে কিনা তা চেক করুন। যদি তাই হয়, তাহলে এই পৃষ্ঠার dSYM নেই/আপলোড হচ্ছে না সংক্রান্ত প্রায়শই জিজ্ঞাসিত প্রশ্ন বিভাগে "dSYM নেই সংক্রান্ত সতর্কতা" সমস্যার সমাধান করার ধাপ অনুসরণ করুন। মনে রাখবেন যে এইসব dSYM আপলোড করলে ইতিমধ্যে হওয়া ক্র্যাশ সিম্বলিকেট হবে না, তবে এটি ভবিষ্যতে হওয়া ক্র্যাশের সিম্বলিকেশন নিশ্চিত করতে সাহায্য করবে।
আমি কি macOS বা tvOS-এর জন্য Crashlytics ব্যবহার করতে পারি?
হ্যাঁ, আপনি macOS এবং tvOS প্রোজেক্টে Crashlytics প্রয়োগ করতে পারবেন। Google Analytics-এর জন্য Firebase SDK-এর v8.9.0+ ভার্সন অন্তর্ভুক্ত করতে ভুলবেন না যাতে ক্র্যাশ Google Analytics-এর মাধ্যমে সংগ্রহ করা মেট্রিক্সে অ্যাক্সেস পায় (ক্র্যাশ-ফ্রি ব্যবহারকারী, লেটেস্ট রিলিজ, ভেলোসিটি অ্যালার্ট ও ব্রেডক্রাম্ব লগ)।
আমি কি বিভিন্ন Apple প্ল্যাটফর্মে একাধিক অ্যাপ সহ Firebase প্রোজেক্টে Crashlytics ব্যবহার করতে পারি?
আপনি এখন একটি Firebase প্রোজেক্টে একাধিক অ্যাপের জন্য ক্র্যাশ রিপোর্ট করতে পারবেন, এমনকি অ্যাপগুলি বিভিন্ন Apple প্ল্যাটফর্মের জন্য তৈরি করা হলেও (যেমন, iOS, tvOS এবং Mac Catalyst)। আগে, একই বান্ডেল আইডি থাকলে, আপনাকে অ্যাপগুলিকে আলাদা আলাদা Firebase প্রোজেক্টে বিভক্ত করতে হতো।
Android সহায়তা
কেন ANR শুধুমাত্র Android 11+ ভার্সনের জন্য রিপোর্ট করা হয়?
Crashlytics, Android 11 ও তার পরবর্তী যেকোনও ভার্সনে চলে এমন ডিভাইস থেকে Android অ্যাপের জন্য ANR রিপোর্টিংয়ের সুবিধা দেয়। ANR সংগ্রহ করার জন্য আমরা যে অন্তর্নিহিত API ব্যবহার করি (getHistoricalProcessExitReasons) তা SIGQUIT বা ওয়াচডগ-ভিত্তিক পদ্ধতির চেয়ে বেশি নির্ভরযোগ্য। এই API শুধুমাত্র Android 11+ ডিভাইসে উপলভ্য।
কিছু ANR-এ কেন
BuildId নেই?
আপনার কিছু ANR-এ BuildId না থাকলে, নিম্নলিখিত উপায়ে সমস্যার সমাধান করুন:
আপনি আপ-টু-ডেট Crashlytics Android SDK এবং Crashlytics Gradle প্লাগ-ইন ভার্সন ব্যবহার করছেন কিনা তা নিশ্চিত করুন।
Android 11 এবং কিছু Android 12 ANR-এর জন্য
BuildIdনা থাকলে, সম্ভবত আপনি পুরনো SDK, Gradle প্লাগ-ইন বা দুটিই ব্যবহার করছেন। এইসব ANR-এর জন্য সঠিকভাবেBuildIdসংগ্রহ করতে, আপনাকে নিম্নলিখিত ভার্সন ব্যবহার করতে হবে:- Crashlytics Android SDK v18.3.5+ (Firebase BoM v31.2.2+)
- Crashlytics Gradle প্লাগ-ইন v2.9.4+
আপনার শেয়ার করা লাইব্রেরির জন্য কোনও নন-স্ট্যান্ডার্ড লোকেশন ব্যবহার করছেন কিনা তা চেক করুন।
আপনার অ্যাপের শেয়ার করা লাইব্রেরির জন্য শুধুমাত্র
BuildIdনা থাকলে, সম্ভবত আপনি শেয়ার করা লাইব্রেরির জন্য স্ট্যান্ডার্ড, ডিফল্ট লোকেশন ব্যবহার করছেন না। এমন হলে, Crashlytics হয়ত সংশ্লিষ্টBuildIdলোকেট করতে পারবে না। আমরা সাজেস্ট করি যে আপনি শেয়ার করা লাইব্রেরির জন্য স্ট্যান্ডার্ড লোকেশন ব্যবহার করার কথা বিবেচনা করুন।বিল্ড প্রসেস চলাকালীন আপনি যাতে
BuildIdস্ট্রিপ না করেন তা নিশ্চিত করুন।মনে রাখবেন, সমস্যা সমাধানের জন্য নিচে উল্লেখ করা পরামর্শ ANR ও নেটিভ ক্র্যাশ, উভয় ক্ষেত্রেই প্রযোজ্য।
আপনার বাইনারিতে
readelf -nরান করেBuildIdআছে কিনা তা চেক করুন। যদিBuildIdনা থাকে, তাহলে আপনার বিল্ড সিস্টেমের জন্য ফ্ল্যাগে-Wl,--build-idযোগ করুন।আপনার APK সাইজ কমানোর প্রচেষ্টায় আপনি অনিচ্ছাকৃতভাবে
BuildIdস্ট্রিপ করছেন কিনা তা চেক করুন।আপনি যদি কোনও লাইব্রেরির স্ট্রিপড ও আনস্ট্রিপড ভার্সন রাখেন, তাহলে আপনার কোডে সঠিক ভার্সনটি পয়েন্ট করতে ভুলবেন না।
Crashlytics ড্যাশবোর্ড এবং Google Play Console-এ ANR রিপোর্টের মধ্যে পার্থক্য
Google Play এবং Crashlytics-এর মধ্যে ANR-এর সংখ্যার মধ্যে অমিল থাকতে পারে। ANR ডেটা সংগ্রহ ও রিপোর্ট করার মেকানিজমে পার্থক্যের কারণে এটি প্রত্যাশিত। অ্যাপ পরের বার চালু হলে Crashlytics ANR-এর ব্যাপারে রিপোর্ট করে, যদিও Android Vitals, ANR হওয়ার পরে ANR ডেটা পাঠায়।
এছাড়াও, Crashlytics শুধুমাত্র Android 11+ ভার্সনে চলা ডিভাইসে হওয়া ANR দেখায়, Google Play-এর সাথে তুলনা করলে, এটি Google Play পরিষেবা এবং ডেটা সংগ্রহের সম্মতি গ্রহণ করা ডিভাইস থেকে ANR দেখায়।
.java সমস্যা হিসেবে লেবেল করা .ktটি ফাইল থেকে
আমি কেন ক্র্যাশ দেখতে পাচ্ছি?
কোনও অ্যাপ যদি এমন কোনও অবফাসকেটর ব্যবহার করে যা ফাইল এক্সটেনশন প্রকাশ করে না,
Crashlytics ডিফল্ট হিসেবে .java ফাইল এক্সটেনশন সহ প্রতিটি সমস্যা তৈরি করে।
যাতে Crashlytics সঠিক ফাইল এক্সটেনশন সহ সমস্যা তৈরি করতে পারে, আপনার অ্যাপ নিম্নলিখিত সেট-আপ ব্যবহার করছে কিনা তা নিশ্চিত করুন:
- Android Gradle 4.2.0 বা তার পরবর্তী যেকোনও ভার্সন ব্যবহার করে
- অবফাসকেশন চালু করে R8 ব্যবহার করে। আপনার অ্যাপ R8-এ আপডেট করতে, এই ডকুমেন্টেশন ফলো করুন।
মনে রাখবেন, উপরে বর্ণিত সেট-আপে আপডেট করার পরে, আপনি হয়ত
নতুন .ktটি সমস্যা দেখতে শুরু করবেন যা আগে থেকে থাকা .javaটি সমস্যার ডুপ্লিকেট। সেই পরিস্থিতি সম্পর্কে আরও জানতে
প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন।
আমি কেন
.ktটি সমস্যা দেখতে পাচ্ছি যা আগে থেকেই থাকা
.javaটি সমস্যার ডুপ্লিকেট?
২০২১ সালের ডিসেম্বরের মাঝামাঝি থেকে, Crashlytics Kotlin ব্যবহার করে এমন অ্যাপ্লিকেশনের জন্য উন্নত সহায়তা প্রদান করা শুরু করেছে।
সম্প্রতি পর্যন্ত, উপলভ্য অবফাসকেটর ফাইল এক্সটেনশন প্রকাশ করেনি, তাই
Crashlytics ডিফল্ট হিসেবে .java ফাইল এক্সটেনশন সহ প্রতিটি সমস্যা তৈরি করেছে।
তবে, Android Gradle 4.2.0 থেকে R8 ফাইল এক্সটেনশন সাপোর্ট করে।
এই আপডেটের মাধ্যমে, Crashlytics এখন নির্ধারণ করতে পারবে যে অ্যাপের মধ্যে ব্যবহার করা প্রতিটি ক্লাস
Kotlin-এ লেখা হয়েছে কিনা এবং সমস্যা সংক্রান্ত সিগনেচারে সঠিক ফাইলের নাম
অন্তর্ভুক্ত করতে পারবে। আপনার অ্যাপে নিম্নলিখিত সেট-আপ থাকলে,
ক্র্যাশ এখন সঠিকভাবে .kt ফাইলের (প্রয়োজন অনুযায়ী) সাথে অ্যাট্রিবিউট করা হয়:
- আপনার অ্যাপ Android Gradle 4.2.0 বা এর পরের যেকোনও ভার্সন ব্যবহার করে।
- আপনার অ্যাপ অবফাসকেশন চালু থাকা অবস্থায় R8 ব্যবহার করে।
যেহেতু নতুন ক্র্যাশ এখন তাদের সমস্যা স্বাক্ষরে সঠিক ফাইল এক্সটেনশন অন্তর্ভুক্ত করে, তাই আপনি নতুন .ktটি সমস্যা দেখতে পারেন যা আসলে আগে থেকে থাকা .java-লেবেলযুক্ত সমস্যার ডুপ্লিকেট। Firebase কনসোলে, আমরা শনাক্ত করার চেষ্টা করি
এবং আপনাকে জানাই যে নতুন .kt সমস্যাটি আগে থেকে থাকা .java-লেবেলযুক্ত সমস্যার
সম্ভাব্য ডুপ্লিকেট কিনা।
Dexguard-এর সাথে ক্র্যাশ হচ্ছে না
আপনি যদি নিম্নলিখিত ব্যতিক্রম দেখতে পান, তাহলে সম্ভবত আপনি DexGuard-এর এমন একটি ভার্সন ব্যবহার করছেন যা Firebase Crashlytics SDK-এর সাথে মানানসই নয়:
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
এই ব্যতিক্রমের কারণে আপনার অ্যাপ ক্র্যাশ করে না, তবে এটি ক্র্যাশ রিপোর্ট পাঠাতে বাধা দেয়। এর সমাধান করতে:
আপনি DexGuard 8.x-এর লেটেস্ট রিলিজ ব্যবহার করছেন কিনা তা নিশ্চিত করুন। লেটেস্ট ভার্সনে এমন নিয়ম আছে যা Firebase Crashlytics SDK-এর জন্য প্রয়োজন।
আপনি DexGuard ভার্সন পরিবর্তন করতে না চাইলে, আপনার অবফাসকেশন নিয়মে (আপনার DexGuard কনফিগারেশন ফাইলে) নিম্নলিখিত লাইন যোগ করে দেখুন:
-keepresourcexmlelements manifest/application/service/meta-data@value=cct
Crashlytics Gradle প্লাগ-ইন v3-এ কীভাবে আপগ্রেড করবেন?
Crashlytics Gradle প্লাগ-ইনের লেটেস্ট রিলিজ হল একটি মেজর ভার্সন (v3.0.0) এবং এটি Gradle ও Android Gradle প্লাগ-ইনের পুরনো ভার্সনের জন্য সহায়তা বন্ধ করে SDK-কে আধুনিক করে তোলে। এছাড়াও, এই রিলিজে করা পরিবর্তনগুলি AGP v8.1+ সংক্রান্ত সমস্যার সমাধান করে এবং নেটিভ অ্যাপ ও কাস্টমাইজ করা বিল্ডের জন্য সহায়তা উন্নত করে।
ন্যূনতম প্রয়োজনীয়তা
Crashlytics Gradle প্লাগ-ইন v3-এর জন্য নিম্নলিখিত ন্যূনতম প্রয়োজনীয়তা রয়েছে:
Android Gradle প্লাগ-ইন 8.1+
Android Studio-এর লেটেস্ট ভার্সনে Android Gradle প্লাগ-ইন আপগ্রেড অ্যাসিস্ট্যান্ট ব্যবহার করে এই প্লাগ-ইন আপগ্রেড করুন।Firebase-এর
google-servicesGradle প্লাগ-ইন 4.4.1+
আপনার প্রোজেক্টের Gradle বিল্ড ফাইলে লেটেস্ট ভার্সন উল্লেখ করে এই প্লাগ-ইন আপগ্রেড করুন, যেমন:
Kotlin
plugins { id("com.android.application") version "8.1.4" apply false id("com.google.gms.google-services") version "4.5.0" apply false ... }
Groovy
plugins { id 'com.android.application' version '8.1.4' apply false id 'com.google.gms.google-services' version '4.5.0' apply false ... }
Crashlytics এক্সটেনশনে পরিবর্তন
Crashlytics Gradle প্লাগ-ইনের v3 ভার্সনের সাথে, Crashlytics এক্সটেনশনে নিম্নলিখিত ব্রেকিং পরিবর্তন করা হয়েছে:
defaultConfigAndroid ব্লক থেকে এক্সটেনশন সরানো হয়েছে। পরিবর্তে, আপনাকে প্রতিটি ভেরিয়েন্ট কনফিগার করতে হবে।mappingFileফিল্ডটি সরিয়ে দেওয়া হয়েছে। পরিবর্তে, মার্জ করা ম্যাপিং ফাইল এখন অটোমেটিক প্রদান করা হয়।strippedNativeLibsDirফিল্ডটি সরিয়ে দেওয়া হয়েছে। পরিবর্তে, সব নেটিভ লাইব্রেরির জন্য আপনারunstrippedNativeLibsDirব্যবহার করা উচিত।unstrippedNativeLibsDirফিল্ডটি পরিবর্তন করে ক্রমবর্ধমান করা হয়েছে।একাধিক ডিরেক্টরি সহ একটি উদাহরণ দেখুন
buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true unstrippedNativeLibsDir = file("MY/NATIVE/LIBS") } } productFlavors { flavorDimensions += "feature" create("basic") { dimension = "feature" // ... } create("featureX") { dimension = "feature" configure<CrashlyticsExtension> { unstrippedNativeLibsDir = file("MY/FEATURE_X/LIBS") } } } }
টাস্ক শুধুমাত্রuploadCrashlyticsSymbolFilesBasicReleaseMY/NATIVE/LIBS-এ চিহ্ন আপলোড করবে, কিন্তুuploadCrashlyticsSymbolFilesFeatureXReleaseMY/NATIVE/LIBSএবংMY/FEATURE_X/LIBS, উভয় ক্ষেত্রেই চিহ্ন আপলোড করবে।বন্ধ করার ফিল্ড
symbolGenerator-এর পরিবর্তে দুটি নতুন টপ লেভেল ফিল্ড যোগ করা হয়েছে:symbolGeneratorType,"breakpad"(ডিফল্ট) অথবা"csym"-এর মধ্যে যেকোনও একটি স্ট্রিং।breakpadBinary, স্থানীয়dump_symsবাইনারি ওভাররাইডের ফাইল।
এক্সটেনশন কীভাবে আপগ্রেড করতে হয় তার উদাহরণ
Kotlin
| আগে |
buildTypes { release { configure<CrashlyticsExtension> { // ... symbolGenerator( closureOf<SymbolGenerator> { symbolGeneratorType = "breakpad" breakpadBinary = file("/PATH/TO/BREAKPAD/DUMP_SYMS") } ) } } } |
| এখন v3-তে |
buildTypes { release { configure<CrashlyticsExtension> { // ... symbolGeneratorType = "breakpad" breakpadBinary = file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } |
Groovy
| আগে |
buildTypes { release { firebaseCrashlytics { // ... symbolGenerator { breakpad { binary file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } } } |
| এখন v3-তে |
buildTypes { release { firebaseCrashlytics { // ... symbolGeneratorType "breakpad" breakpadBinary file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } |
Android-NDK সংক্রান্ত সহায়তা
Crashlytics ড্যাশবোর্ড এবং logcat-এ NDK স্ট্যাক ট্রেসের মধ্যে পার্থক্য
LLVM এবং GNU টুলচেনের আপনার অ্যাপের বাইনারির শুধুমাত্র-পড়ার সেগমেন্টের জন্য স্বতন্ত্র ডিফল্ট এবং ট্রিটমেন্ট আছে, যা Firebase কনসোলে অসামঞ্জস্যপূর্ণ স্ট্যাক ট্রেস তৈরি করতে পারে। এটি কমাতে, আপনার বিল্ড প্রসেসে নিম্নলিখিত লিঙ্কার ফ্ল্যাগ যোগ করুন:
আপনি LLVM টুলচেন থেকে
lldলিঙ্কার ব্যবহার করলে, এটি যোগ করুন:-Wl,--no-rosegmentআপনি GNU টুলচেন থেকে
ld.goldলিঙ্কার ব্যবহার করলে, যোগ করুন:-Wl,--rosegment
আপনি যদি এখনও স্ট্যাক ট্রেস অসঙ্গতি দেখতে পান (অথবা যদি কোনও ফ্ল্যাগই আপনার টুলচেনের সাথে প্রাসঙ্গিক না হয়), তাহলে পরিবর্তে আপনার বিল্ড প্রসেসে নিম্নলিখিতগুলি যোগ করার চেষ্টা করুন:
-fno-omit-frame-pointerNDK-এর জন্য আমি কীভাবে আমার নিজস্ব ব্রেকপ্যাড সিম্বল ফাইল জেনারেটর বাইনারি ব্যবহার করব?
Crashlytics প্লাগ-ইন একটি
কাস্টমাইজ করা ব্রেকপ্যাড সিম্বল ফাইল জেনারেটর বান্ডেল করে।
আপনি যদি ব্রেকপ্যাড সিম্বল ফাইল তৈরি করার জন্য নিজের বাইনারি ব্যবহার করতে চান (যেমন, আপনি যদি সোর্স থেকে আপনার বিল্ড চেনে সব নেটিভ এক্সিকিউটেবল তৈরি করতে চান), তাহলে এক্সিকিউটেবলের পাথ উল্লেখ করতে ঐচ্ছিক symbolGeneratorBinary এক্সটেনশন প্রপার্টি
ব্যবহার করুন।
আপনি দুটি উপায়ের মধ্যে একটির মাধ্যমে ব্রেকপ্যাড সিম্বল ফাইল জেনারেটর বাইনারির পাথ নির্দিষ্ট করতে পারেন:
বিকল্প ১: আপনার
build.gradleফাইলেfirebaseCrashlyticsএক্সটেনশনের মাধ্যমে পাথ উল্লেখ করুনআপনার অ্যাপ-লেভেল
build.gradle.ktsফাইলে নিম্নলিখিত কোড যোগ করুন:Gradle প্লাগ-ইন v3.0.0+
android { buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true // Add these optional fields to specify the path to the executable symbolGeneratorType = "breakpad" breakpadBinary = file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } }
প্লাগ-ইনের পুরনো ভার্সন
android { // ... buildTypes { // ... release { // ... firebaseCrashlytics { // existing; required for either symbol file generator nativeSymbolUploadEnabled true // Add this optional new block to specify the path to the executable symbolGenerator { breakpad { binary file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } } }
বিকল্প ২: আপনার Gradle প্রপার্টি ফাইলের একটি প্রপার্টি লাইনের মাধ্যমে পাথ নির্দিষ্ট করুন
আপনি
com.google.firebase.crashlytics.breakpadBinaryপ্রপার্টি ব্যবহার করে এক্সিকিউটেবল ফাইলের পাথ উল্লেখ করতে পারেন।আপনি ম্যানুয়ালি Gradle প্রপার্টি ফাইল আপডেট করতে পারেন অথবা কমান্ড লাইনের মাধ্যমে ফাইল আপডেট করতে পারেন। যেমন, কমান্ড লাইনের মাধ্যমে পাথ নির্দিষ্ট করতে, নিচের মতো কমান্ড ব্যবহার করুন:
./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \ -Pcom.google.firebase.crashlytics.breakpadBinary=/PATH/TO/BREAKPAD/DUMP_SYMS \ app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
Crashlytics-এ কি armeabi কাজ করে?
Firebase Crashlytics NDK-তে ARMv5 (armeabi) কাজ করে না। NDK r17 থেকে এই ABI-এর জন্য সহায়তা সরিয়ে দেওয়া হয়েছে।
ওয়েব সহায়তা
Component crashlytics has not been registered yet সমস্যা দেখা যাচ্ছে
@firebase/crashlytics প্যাকেজ ব্যবহার করার সময়, আপনার ইমপোর্টে মডিউলার নেমস্পেস
মিক্স করবেন না। firebase/app থেকে initializeApp ইমপোর্ট করার সময় @firebase/crashlytics থেকে getCrashlytics ইমপোর্ট করলে,
বান্ডলার দুটি আলাদা ইন্টার্নাল রেজিস্ট্রি লোড করে, যার ফলে
Component crashlytics has not been registered yet-এর মতো সমস্যা হয়।
ডুয়াল-প্যাকেজ রেজিস্ট্রি সংক্রান্ত দ্বন্দ্ব কীভাবে প্রতিরোধ করবেন তা এখানে দেওয়া হল:
আপনার প্রোজেক্টে সব Firebase ইমপোর্ট স্ট্যান্ডার্ডাইজ করুন যাতে স্কোপড
@firebase/নেমস্পেস (যেমন,@firebase/appএবং@firebase/crashlytics) ব্যবহার করা যায়।আপনার অ্যাপ Vite ব্যবহার করলে, আপনার
vite.config.tsফাইলে@firebase/appস্পষ্টভাবে ডুপ্লিকেট করা বন্ধ করুন:// vite.config.ts import { defineConfig } from 'vite'; export default defineConfig({ resolve: { dedupe: ['@firebase/app'] } });
verbatimModuleSyntax চালু থাকার কারণে TypeScript কম্পাইলেশন সংক্রান্ত সমস্যা
আধুনিক TypeScript কনফিগারেশন (যেমন Vite এবং Angular টেমপ্লেট) প্রায়শই
tsconfig.json-এ "verbatimModuleSyntax": true চালু করে। এই ফ্ল্যাগ চালু করা থাকলে, স্ট্যান্ডার্ড ভ্যালু ইমপোর্ট ব্যবহার করে TypeScript ইন্টারফেস ইমপোর্ট করলে কম্পাইলেশন সংক্রান্ত সমস্যা হয়।
FirebaseApp বা Crashlytics-এর মতো TypeScript ইন্টারফেস ইমপোর্ট করার সময়
স্পষ্ট type ইমপোর্ট ব্যবহার করুন:
import { initializeApp, type FirebaseApp } from '@firebase/app';
import { getCrashlytics, type Crashlytics } from '@firebase/crashlytics';
Unity সংক্রান্ত সহায়তা
Crashlytics ড্যাশবোর্ডে Android অ্যাপের জন্য আনসিম্বলিক স্ট্যাক ট্রেস দেখা
আপনি Unity IL2CPP ব্যবহার করলে এবং সিম্বল ছাড়া স্ট্যাক ট্রেস দেখতে পেলে, নিম্নলিখিত ধাপগুলি অনুসরণ করে দেখুন:
আপনি Crashlytics Unity SDK-এর v8.6.1 বা তার পরবর্তী ভার্সন ব্যবহার করছেন কিনা তা ভাল করে দেখে নিন।
আপনার সিম্বল ফাইল তৈরি ও আপলোড করার জন্য Firebase CLI
crashlytics:symbols:uploadকমান্ড সেট-আপ ও রান করছেন কিনা তা ভাল করে দেখে নিন।আপনি যখনই কোনও রিলিজ বিল্ড বা এমন কোনও বিল্ড তৈরি করবেন যার জন্য আপনি Firebase কনসোলে সিম্বলিক করা স্ট্যাক ট্রেস দেখতে চান, তখনই আপনাকে এই CLI কমান্ড রান করতে হবে। পড়ার যোগ্য ক্র্যাশ রিপোর্ট পান লিঙ্ক থেকে আরও জানুন।
IL2CPP ব্যবহার করে এমন অ্যাপের সাথে Crashlytics ব্যবহার করা যাবে?
হ্যাঁ, Crashlytics আপনার অ্যাপের জন্য সিম্বলিক করা স্ট্যাক ট্রেস দেখাতে পারে যা IL2CPP ব্যবহার করে। এই সুবিধা Android বা Apple প্ল্যাটফর্মে রিলিজ করা অ্যাপের জন্য উপলভ্য। আপনাকে এই কাজগুলি করতে হবে:
আপনি Crashlytics Unity SDK-এর v8.6.0 বা তার পরবর্তী ভার্সন ব্যবহার করছেন কিনা তা নিশ্চিত করুন।
আপনার প্ল্যাটফর্মের জন্য প্রয়োজনীয় টাস্ক সম্পূর্ণ করুন:
Apple প্ল্যাটফর্ম অ্যাপের জন্য: কোনও বিশেষ অ্যাকশন নেওয়ার প্রয়োজন নেই। Apple প্ল্যাটফর্ম অ্যাপের জন্য, Firebase Unity Editor প্লাগ-ইন অটোমেটিক আপনার Xcode প্রোজেক্ট কনফিগার করে যাতে সিম্বল আপলোড করা যায়।
Android অ্যাপের জন্য: আপনার সিম্বল ফাইল তৈরি ও আপলোড করতে, আপনি Firebase CLI
crashlytics:symbols:uploadকমান্ড সেট-আপ করেছেন ও চালাচ্ছেন কিনা তা ভালভাবে দেখে নিন।আপনি যখনই কোনও রিলিজ বিল্ড বা এমন কোনও বিল্ড তৈরি করেন যার জন্য আপনি Firebase কনসোলে সিম্বলিক স্ট্যাক ট্রেস দেখতে চান, তখনই আপনাকে এই CLI কমান্ড রান করতে হবে। পড়ার যোগ্য ক্র্যাশ রিপোর্ট পান লিঙ্ক থেকে আরও জানুন।
শনাক্ত করা হয়নি এমন এক্সেপশনকে মারাত্মক হিসেবে রিপোর্ট করা হচ্ছে
Crashlytics, আনক্যাচড এক্সেপশনকে মারাত্মক হিসেবে রিপোর্ট করতে পারে (Unity SDK-এর v10.4.0 থেকে শুরু করে)। এই ফিচার ব্যবহার করার যুক্তি ও পেশাদার পদ্ধতি ব্যাখ্যা করতে নিম্নলিখিত প্রায়শই জিজ্ঞাসিত প্রশ্ন সাহায্য করে।
কোনও অ্যাপ কেন আনক্যাচড এক্সেপশনকে মারাত্মক হিসেবে রিপোর্ট করবে?
আনক্যাচড এক্সেপশনকে মারাত্মক হিসেবে রিপোর্ট করার মাধ্যমে, আপনি আরও বাস্তবসম্মত ইঙ্গিত পাবেন যে কোন এক্সেপশনের ফলে গেমটি খেলার অযোগ্য হতে পারে – এমনকি অ্যাপটি চালানো চালিয়ে গেলেও।
মনে রাখবেন, আপনি ফেটাল রিপোর্টিং শুরু করলে, আপনার ক্র্যাশ-ফ্রি ব্যবহারকারীর (CFU) শতাংশ সম্ভবত কমে যাবে, তবে CFU মেট্রিক আপনার অ্যাপের সাথে ব্যবহারকারীর অভিজ্ঞতার আরও বেশি প্রতিনিধিত্ব করবে।
কোন ব্যতিক্রমগুলি মারাত্মক হিসাবে রিপোর্ট করা হবে?
Crashlytics-এর জন্য মারাত্মক হিসেবে আনক্যাচড এক্সেপশন রিপোর্ট করতে, নিম্নলিখিত দুটি শর্ত পূরণ করতে হবে:
আপনার অ্যাপে ইনিশিয়ালাইজেশনের সময়,
ReportUncaughtExceptionsAsFatalপ্রপার্টি অবশ্যইtrue-এ সেট করতে হবে।আপনার অ্যাপ (বা অন্তর্ভুক্ত লাইব্রেরি) এমন একটি ব্যতিক্রম দেখায় যা ধরা পড়ে না। ব্যতিক্রম যা তৈরি করা হয়েছে, কিন্তু থ্রো করা হয়নি, তা আনক্যাচড হিসেবে বিবেচিত হয় না।
আনক্যাচড এক্সেপশনকে মারাত্মক হিসেবে রিপোর্ট করার সুবিধা চালু করার পরে, আমি এখন অনেক নতুন মারাত্মক সমস্যা দেখতে পাচ্ছি। আমি কীভাবে এই ব্যতিক্রমগুলি সঠিকভাবে ম্যানেজ করব?
আপনি যখন আপনার আনক্যাচড এক্সেপশনকে মারাত্মক হিসেবে রিপোর্ট পেতে শুরু করেন, তখন এই আনক্যাচড এক্সেপশনগুলি ম্যানেজ করার জন্য এখানে কিছু বিকল্প রয়েছে:
- আপনি কীভাবে এই আনক্যাচড এক্সেপশন ক্যাচ ও ম্যানেজ করা শুরু করতে পারেন তা বিবেচনা করুন।
- Unity ডিবাগ কনসোল এবং Crashlytics-এ ব্যতিক্রম লগ করার জন্য বিভিন্ন বিকল্প বিবেচনা করুন।
থ্রো করা ব্যতিক্রম ক্যাচ ও ম্যানেজ করা
অপ্রত্যাশিত বা ব্যতিক্রমী অবস্থা দেখানোর জন্য ব্যতিক্রম তৈরি করা হয় এবং থ্রো করা হয়। থ্রো করা এক্সেপশনের মাধ্যমে দেখানো সমস্যার সমাধান করার অর্থ হল প্রোগ্রামকে একটি পরিচিত অবস্থায় ফিরিয়ে আনা (এই প্রসেসকে এক্সেপশন হ্যান্ডলিং বলা হয়)।
প্রোগ্রামটি কোনও পরিচিত অবস্থায় ফিরিয়ে আনা না গেলে, আগে থেকে অনুমান করা যায় এমন সব ব্যতিক্রম ধরা এবং ম্যানেজ করা হল পেশাদার পদ্ধতি।
কোন ধরনের ব্যতিক্রম কোন কোড দ্বারা ধরা এবং পরিচালনা করা হয় তা নিয়ন্ত্রণ করতে,
কোডটি র্যাপ করুন যা try-catch ব্লকে একটি ব্যতিক্রম তৈরি করতে পারে।
catch স্টেটমেন্টের শর্তগুলি যতটা সম্ভব সংক্ষিপ্ত রাখুন যাতে নির্দিষ্ট ব্যতিক্রমগুলি যথাযথভাবে ম্যানেজ করা যায়।
Unity বা Crashlytics-এ ব্যতিক্রম লগ করুন
সমস্যা ডিবাগ করার জন্য Unity বা Crashlytics-এ ব্যতিক্রম রেকর্ড করার একাধিক উপায় আছে।
Crashlytics ব্যবহার করার সময়, এখানে সবচেয়ে সাধারণ ও সাজেস্ট করা দুটি বিকল্প দেওয়া হল:
বিকল্প ১: ডেভেলপমেন্ট বা সমস্যার সমাধান করার সময়, Unity কনসোলে প্রিন্ট করুন, কিন্তু Crashlytics-এ রিপোর্ট করবেন না,
Debug.Log(exception),Debug.LogWarning(exception)এবংDebug.LogError(exception)ব্যবহার করে Unity কনসোলে প্রিন্ট করুন যা Unity কনসোলে এক্সেপশনের কন্টেন্ট প্রিন্ট করে এবং এক্সেপশন আবার থ্রো করে না।
বিকল্প ২: নিম্নলিখিত পরিস্থিতিতে Crashlytics ড্যাশবোর্ডে একত্রিত রিপোর্টিংয়ের জন্য Crashlytics-এ আপলোড করুন:
- যদি কোনও ব্যতিক্রম পরবর্তী সম্ভাব্য Crashlytics ইভেন্ট ডিবাগ করার জন্য লগ করার মতো হয়, তাহলে
Crashlytics.Log(exception.ToString())ব্যবহার করুন। - ব্যতিক্রম ধরা পড়া এবং ম্যানেজ করা সত্ত্বেও যদি Crashlytics-এ রিপোর্ট করতে হয়, তাহলে
Crashlytics.LogException(exception)ব্যবহার করে এটি নন-ফেটাল ইভেন্ট হিসেবে লগ করুন।
- যদি কোনও ব্যতিক্রম পরবর্তী সম্ভাব্য Crashlytics ইভেন্ট ডিবাগ করার জন্য লগ করার মতো হয়, তাহলে
তবে, আপনি যদি Unity Cloud Diagnostics-এ কোনও মারাত্মক ইভেন্ট ম্যানুয়ালি রিপোর্ট করতে চান, তাহলে আপনি Debug.LogException ব্যবহার করতে পারেন। এই বিকল্পটি ইউনিটি কনসোলে ব্যতিক্রম প্রিন্ট করে,
যেমন বিকল্প ১, তবে এটি ব্যতিক্রমও থ্রো করে
(এটি এখনও থ্রো বা ক্যাচ করা হয়েছে কিনা)। এটি
নন-লোকালি সমস্যা দেখায়। এর অর্থ হল, Debug.LogException(exception)-এর চারপাশে try-catch ব্লক থাকলেও,
এখনও আনক্যাচড এক্সেপশন দেখা যায়।
তাই, আপনি যদি নিম্নলিখিত সবকটি কাজ করতে চান, তবেই Debug.LogException নম্বরে কল করুন:
- Unity কনসোলে ব্যতিক্রম প্রিন্ট করতে।
- Crashlytics-এ ব্যতিক্রমটি মারাত্মক ইভেন্ট হিসেবে আপলোড করতে।
- ব্যতিক্রমটি থ্রো করতে, এটিকে একটি আনক্যাচড ব্যতিক্রম হিসাবে বিবেচনা করুন এবং এটি Unity Cloud Diagnostics-এ রিপোর্ট করুন।
মনে রাখবেন, আপনি যদি Unity কনসোলে ধরা পড়া ব্যতিক্রম প্রিন্ট করতে চান এবং Crashlytics-এ নন-ফেটাল ইভেন্ট হিসেবে আপলোড করতে চান, তাহলে এর পরিবর্তে নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
try
{
methodThatThrowsMyCustomExceptionType();
}
catch(MyCustomExceptionType exception)
{
// Print the exception to the Unity console at the error level.
Debug.LogError(exception);
// Upload the exception to Crashlytics as a non-fatal event.
Crashlytics.LogException(exception); // not Debug.LogException
//
// Code that handles the exception
//
}
ইন্টিগ্রেশন সম্পর্কিত সহায়তা
অ্যাপটি Google Mobile Ads SDK ব্যবহার করে কিন্তু ক্র্যাশ হয় না
আপনার প্রোজেক্টে Google Mobile Ads SDK-এর পাশাপাশি Crashlytics ব্যবহার করা হলে,
সম্ভবত ক্র্যাশ রিপোর্টাররা এক্সেপশন হ্যান্ডলার রেজিস্টার করার সময়
হস্তক্ষেপ করছে। সমস্যার সমাধান করতে, disableSDKCrashReporting-এ কল করে Mobile Ads SDK-তে
ক্র্যাশ রিপোর্টিং বন্ধ করুন।
আমার BigQuery ডেটাসেট কোথায় আছে?
BigQuery-এ ডেটা এক্সপোর্ট সেট-আপ করার সময় আপনার বেছে নেওয়া ডেটাসেট লোকেশনে Firebase ডেটা এক্সপোর্ট করে।
এই লোকেশন Crashlytics ডেটাসেট এবং Firebase সেশন ডেটাসেট (সেশন ডেটা এক্সপোর্ট করার জন্য চালু করা থাকলে) উভয়ের ক্ষেত্রেই প্রযোজ্য।
এই লোকেশন শুধুমাত্র BigQuery-এ এক্সপোর্ট করা ডেটার ক্ষেত্রে প্রযোজ্য এবং Firebase কনসোলের Crashlytics ড্যাশবোর্ডে বা Android Studio-তে ব্যবহারের জন্য সেভ করা ডেটার লোকেশনের উপর এর কোনও প্রভাব পড়ে না।
ডেটাসেট তৈরি করার পরে, এর লোকেশন পরিবর্তন করা যাবে না, তবে আপনি ডেটাসেটটি অন্য লোকেশনে কপি করতে পারবেন অথবা ম্যানুয়ালি অন্য লোকেশনে ডেটাসেটটি সরাতে (আবার তৈরি করতে) পারবেন। আরও জানতে, আগে থেকে থাকা এক্সপোর্টের লোকেশন পরিবর্তন করুন বিকল্প দেখুন।
BigQuery-এর জন্য নতুন এক্সপোর্ট ইনফ্রাস্ট্রাকচারে আপগ্রেড করার পরে সমস্যা হচ্ছে?
২০২৪ সালের অক্টোবরের মাঝামাঝি সময়ে, Crashlytics BigQuery-এ Crashlytics ডেটার ব্যাচ এক্সপোর্ট করার জন্য একটি নতুন পরিকাঠামো চালু করেছে।
২ মার্চ, ২০২৬ থেকে সমস্ত Firebase প্রোজেক্ট অটোমেটিক নতুন ব্যাচ এক্সপোর্ট ইনফ্রাস্ট্রাকচারে আপগ্রেড করা হয়েছে।
পুরনো এক্সপোর্ট ইনফ্রাস্ট্রাকচার ও নতুন এক্সপোর্ট ইনফ্রাস্ট্রাকচারের মধ্যে গুরুত্বপূর্ণ পার্থক্য
নতুন ইনফ্রাস্ট্রাকচার মার্কিন যুক্তরাষ্ট্রের বাইরে Crashlyticsটি ডেটাসেট লোকেশন সাপোর্ট করে।
অক্টোবর ২০২৪-এর মাঝামাঝি সময়ের আগে এক্সপোর্ট চালু করা হয়েছে এবং নতুন এক্সপোর্ট ইনফ্রাস্ট্রাকচারে আপগ্রেড করা হয়েছে — আপনি এখন বিকল্প হিসেবে ডেটা এক্সপোর্টের লোকেশন পরিবর্তন করতে পারবেন।
অক্টোবর ২০২৪-এর মাঝামাঝি বা তার পরে এক্সপোর্ট চালু করা হয়েছে — সেট-আপের সময় আপনাকে ডেটা এক্সপোর্টের জন্য লোকেশন বেছে নিতে প্রম্পট করা হয়েছে।
আপনি এক্সপোর্ট করার সুবিধা চালু করার আগে থেকে ডেটার ব্যাকফিল নতুন পরিকাঠামোয় কাজ করে না।
পুরানো ইনফ্রাস্ট্রাকচার, আপনি এক্সপোর্ট চালু করার তারিখের ৩০ দিন আগে পর্যন্ত ব্যাকফিল সাপোর্ট করত।
নতুন পরিকাঠামো গত ৩০ দিন পর্যন্ত ব্যাকফিল অথবা আপনি BigQuery-এ এক্সপোর্ট করার সুবিধা চালু করার পর থেকে সবচেয়ে সাম্প্রতিক তারিখ পর্যন্ত (যেটি সবচেয়ে সাম্প্রতিক) ডেটা ব্যাকফিল করতে পারে।
নতুন ইনফ্রাস্ট্রাকচার, আপনার Firebase প্রোজেক্টে Firebase অ্যাপের জন্য সেট করা শনাক্তকারী ব্যবহার করে BigQuery ব্যাচ টেবিলের নাম দেয়।
পুরানো ইনফ্রাস্ট্রাকচার ব্যাচ টেবিলে ডেটা লিখেছে, যার নাম বান্ডেল আইডি বা প্যাকেজের নামের উপর ভিত্তি করে আপনার অ্যাপের বাইনারিতে।
নতুন ইনফ্রাস্ট্রাকচার, বান্ডেল আইডি বা প্যাকেজের নামের উপর ভিত্তি করে ব্যাচ টেবিলে ডেটা লেখে আপনার Firebase প্রোজেক্টে রেজিস্টার করা Firebase অ্যাপের জন্য সেট করা হয়েছে।
আপনার লিগ্যাসি ব্যাচ টেবিলের নাম Firebase অ্যাপ শনাক্তকারীর সাথে না মিললে
আপনার রেজিস্টার করা Firebase অ্যাপের জন্য সেট করা বান্ডেল আইডি বা প্যাকেজের নামের সাথে আপনার পুরনো ব্যাচ টেবিলের নাম ম্যাচ না করলে, আপনার এক্সপোর্ট করা ব্যাচ ডেটায় আরও বিঘ্ন এড়াতে এইসব বিকল্পের মধ্যে একটি প্রয়োগ করুন।
এক্সপোর্ট ইনফ্রাস্ট্রাকচার কীভাবে BigQuery টেবিলে ডেটা লেখার জন্য আইডেন্টিফায়ার ব্যবহার করে তা বুঝুন
দুটি এক্সপোর্ট ইনফ্রাস্ট্রাকচার কীভাবে Crashlytics ডেটা BigQuery ব্যাচ টেবিলে লেখে তা এখানে দেওয়া হল:
পুরনো এক্সপোর্ট ইনফ্রাস্ট্রাকচার: বান্ডেল আইডি বা প্যাকেজের নামের উপর ভিত্তি করে নামকরণ করা টেবিলে ডেটা লেখা হয়েছে আপনার অ্যাপের বাইনারিতে।
নতুন এক্সপোর্ট ইনফ্রাস্ট্রাকচার: বান্ডেল আইডি বা প্যাকেজের নামের উপর ভিত্তি করে একটি টেবিলে ডেটা লেখে আপনার Firebase প্রোজেক্টে রেজিস্টার করা Firebase অ্যাপের জন্য সেট করা আছে।
তবে, কখনও কখনও আপনার অ্যাপের বাইনারিতে বান্ডেল আইডি বা প্যাকেজের নাম আপনার Firebase প্রোজেক্টে রেজিস্টার করা Firebase অ্যাপের জন্য সেট করা বান্ডেল আইডি বা প্যাকেজের নামের সাথে মেলে না। অ্যাপ রেজিস্ট্রেশনের সময় কেউ আসল আইডেন্টিফায়ার না লিখলে সাধারণত এটি ঘটে।
আপগ্রেড করার আগে এটি ঠিক না করা হলে কী হবে?
এই দুটি লোকেশনে শনাক্তকারী ম্যাচ না করলে, নিম্নলিখিত ঘটনা ঘটেছে:
আপনার Crashlytics ডেটা এখন একটি নতুন BigQuery ব্যাচ টেবিলে লেখা হয় — অর্থাৎ, আপনার Firebase প্রোজেক্টে রেজিস্টার করা Firebase অ্যাপের জন্য সেট করা বান্ডেল আইডি বা প্যাকেজের নামের উপর ভিত্তি করে একটি নতুন টেবিল।
আইডেন্টিফায়ারের উপর ভিত্তি করে নাম সহ আগে থেকে থাকা যেকোনও "লিগ্যাসি" টেবিল আপনার অ্যাপের বাইনারিতে আর ডেটা লেখা নেই।
শনাক্তকারী না মেলার উদাহরণ
মনে রাখবেন যে BigQuery ব্যাচ টেবিলের নাম অটোমেটিক
_IOS বা _ANDROID-এর সাথে যোগ করা হয় যাতে অ্যাপের প্ল্যাটফর্ম বোঝা যায়।
| আপনার অ্যাপের বাইনারিতে শনাক্তকারী | আপনার Firebase অ্যাপের জন্য সেট করা শনাক্তকারী | পুরনো আচরণ | নতুন এক্সপোর্ট ইনফ্রাস্ট্রাকচারে আপগ্রেড করার পরে আচরণ |
সমাধান |
|---|---|---|---|---|
foo |
bar |
অ্যাপের বাইনারিতে (foo) শনাক্তকারীর নাম অনুসারে রাখা একটি টেবিলে
লেখে
|
Firebase অ্যাপের (bar) জন্য সেট করা শনাক্তকারীর নাম অনুসারে
একটি টেবিল তৈরি করে এবং তাতে লেখে
|
নিচে বর্ণিত বিকল্প ১ বা ২-এর মধ্যে যেকোনও একটি প্রয়োগ করুন। |
foo |
bar, qux, ইত্যাদি। |
অ্যাপের বাইনারিতে (foo) শনাক্তকারীর নাম অনুসারে রাখা একটি টেবিলে
লেখে
|
Firebase অ্যাপের (bar, qux,
ইত্যাদি) জন্য সেট করা শনাক্তকারীর নাম অনুসারে
একাধিক টেবিল তৈরি করে* এবং তারপর তাতে লেখে
|
নিচে বর্ণিত বিকল্প ২ প্রয়োগ করুন। |
foo, baz, ইত্যাদি। |
bar |
অ্যাপের বাইনারিতে (foo, baz ইত্যাদি) একাধিক শনাক্তকারীর নামানুসারে
একাধিক টেবিলে লেখে।
|
তৈরি করে** তারপর Firebase অ্যাপের (bar) জন্য সেট করা শনাক্তকারীর নামানুসারে
একটি টেবিলে প্রতিটি অ্যাপের ডেটা লেখে
|
কোনও বিকল্পই প্রয়োগ করা যাবে না।
আপনি এখনও অ্যাপের |
* আপনার অ্যাপের বাইনারিতে থাকা শনাক্তকারী যদি Firebase অ্যাপের জন্য সেট করা কোনও শনাক্তকারীর সাথে মিলে যায়, তাহলে নতুন এক্সপোর্ট ইনফ্রাস্ট্রাকচার সেই শনাক্তকারীর জন্য নতুন টেবিল তৈরি করেনি। পরিবর্তে, এটি সেই নির্দিষ্ট অ্যাপের জন্য ডেটা লেখা চালিয়ে যাবে। অন্য সব অ্যাপ নতুন টেবিলে লেখা হবে।
** আপনার অ্যাপের বাইনারিতে থাকা কোনও একটি শনাক্তকারী যদি Firebase অ্যাপের জন্য সেট করা শনাক্তকারীর সাথে মিলে যায়, তাহলে নতুন এক্সপোর্ট ইনফ্রাস্ট্রাকচার নতুন কোনও টেবিল তৈরি করেনি। পরিবর্তে, এটি সেই টেবিলটি বজায় রাখবে এবং সমস্ত অ্যাপের জন্য এতে ডেটা লেখা শুরু করবে।
বিঘ্ন কমানোর বিকল্প
বিকল্প ১:
নতুন এক্সপোর্ট ইনফ্রাস্ট্রাকচারের মাধ্যমে তৈরি করা নতুন টেবিল ব্যবহার করুন। আপনি পুরনো টেবিল থেকে নতুন টেবিলে ডেটা কপি করবেন।Google Cloud কনসোলে, আপনার পুরনো টেবিল থেকে সব ডেটা কপি করে ইনফ্রাস্ট্রাকচার আপগ্রেড করার সময় তৈরি করা নতুন টেবিলে পেস্ট করুন।
আপনার ব্যাচ টেবিলের উপর নির্ভর করে এমন কোনও ডাউনস্ট্রিম ডিপেন্ডেন্সি থাকলে, নতুন টেবিল ব্যবহার করার জন্য সেগুলি পরিবর্তন করুন।
বিকল্প ২:
আপনার লিগ্যাসি টেবিলে আবার লেখার জন্য রিকনফিগার করুন। এটি করার জন্য আপনাকে BigQuery কনফিগারেশনে কিছু ডিফল্ট ওভাররাইড করতে হবে।Firebase কনসোলে, অমিল ব্যাচ টেবিলের নাম ও শনাক্তকারী সহ অ্যাপের Firebase অ্যাপ আইডি (যেমন,
1:1234567890:ios:321abc456def7890) খুঁজে বের করে নোট করে নিন:
আপনার settings প্রোজেক্ট সেটিংস বিকল্পে যান, তারপর আপনার সব Firebase অ্যাপ ও সেগুলির তথ্য দেখতে আপনার অ্যাপ কার্ডে যান।Google Cloud কনসোলে, ইনফ্রাস্ট্রাকচার আপগ্রেডের মাধ্যমে তৈরি করা নতুন "ডেটা ট্রান্সফার কনফিগ" পরিবর্তন করুন যাতে ডেটা আপনার পুরনো টেবিলে লেখা হয়:
আপনার "ডেটা ট্রান্সফার কনফিগারেশন " দেখতে, BigQuery > ডেটা ট্রান্সফার বিকল্পে যান।
যে কনফিগে সোর্স
Firebase Crashlytics with Multi-Region Supportআছে সেটি বেছে নিন।স্ক্রিনের উপরে ডানদিকের কোণে এডিট করুন বিকল্পে ক্লিক করুন।
ডেটা সোর্সের বিবরণ বিভাগে, gmp_app_id-এর জন্য একটি তালিকা এবং client_namespace-এর জন্য একটি তালিকা খুঁজুন।
BigQuery-এ, Firebase অ্যাপ আইডিকে
gmp_app_idবলা হয়। ডিফল্ট হিসেবে, BigQuery-এclient_namespaceভ্যালু হল অ্যাপের সংশ্লিষ্ট অনন্য বান্ডেল আইডি / প্যাকেজের নাম, তবে আপনি এই ডিফল্ট কনফিগারেশন ওভাররাইড করবেন।BigQuery,
client_namespaceভ্যালু ব্যবহার করে ব্যাচ টেবিলের নাম হিসেবে যেখানে প্রতিটি লিঙ্ক করা Firebase অ্যাপ লেখে।Firebase অ্যাপের gmp_app_id খুঁজুন যার জন্য আপনি ডিফল্ট সেটিংস ওভাররাইড করতে চান। এর client_namespace ভ্যালু পরিবর্তন করে সেই টেবিলের নাম লিখুন যেখানে আপনি Firebase অ্যাপকে লিখতে চান (সাধারণত এটি হল সেই লিগ্যাসি টেবিলের নাম যেখানে অ্যাপটি লিগ্যাসি এক্সপোর্ট ইনফ্রাস্ট্রাকচারের মাধ্যমে লিখছিল)।
কনফিগারেশনে করা পরিবর্তন সেভ করুন।
আপনার লিগ্যাসি টেবিলে যেসব দিনের ডেটা নেই, সেগুলির জন্য ব্যাকফিল শিডিউল করুন।
ব্যাকফিল করা হয়ে গেলে, নতুন টেবিলটি মুছে দিন যা নতুন এক্সপোর্ট ইনফ্রাস্ট্রাকচার অটোমেটিক তৈরি করেছে।