আরও বিশ্লেষণের জন্য আপনি আপনার Firebase Crashlytics ডেটা BigQuery তে রপ্তানি করতে পারেন। BigQuery আপনাকে BigQuery SQL ব্যবহার করে ডেটা বিশ্লেষণ করতে, অন্য ক্লাউড প্রদানকারীতে রপ্তানি করতে এবং Looker Studio এর মাধ্যমে ভিজ্যুয়ালাইজেশন এবং কাস্টম ড্যাশবোর্ডের জন্য এটি ব্যবহার করতে দেয়।
রপ্তানি করা ডেটা দিয়ে আপনি কী করতে পারেন?
BigQuery তে রপ্তানি করা তথ্যে ডিভাইসের ধরণ, অপারেটিং সিস্টেম, ব্যতিক্রম (অ্যান্ড্রয়েড অ্যাপ) বা ত্রুটি (অ্যাপল অ্যাপ) এবং Crashlytics লগ সহ অন্যান্য তথ্য সহ কাঁচা ক্র্যাশ ডেটা থাকে। আপনি এই পৃষ্ঠায় পরে Crashlytics ডেটা কীভাবে রপ্তানি করা হয় এবং এর টেবিল স্কিমা পর্যালোচনা করতে পারেন।
আপনার রপ্তানি করা Crashlytics ডেটা দিয়ে আপনি কী করতে পারেন তার কিছু উদাহরণ এখানে দেওয়া হল:
কোয়েরি চালান
আপনি আপনার Crashlytics ডেটাতে কোয়েরি চালাতে পারেন যাতে ক্র্যাশ ইভেন্ট ডেটাকে আরও সহজে বোধগম্য সারসংক্ষেপে একত্রিত করে এমন রিপোর্ট তৈরি করা যায়। যেহেতু এই ধরণের রিপোর্ট Firebase কনসোলের Crashlytics ড্যাশবোর্ডে পাওয়া যায় না, তাই এগুলি আপনার বিশ্লেষণ এবং ক্র্যাশ ডেটা বোঝার পরিপূরক হতে পারে। পরে এই পৃষ্ঠায়, উদাহরণ কোয়েরির একটি নির্বাচন খুঁজুন।একটি Looker Studio টেমপ্লেট ব্যবহার করুন
Crashlytics আপনার রপ্তানি করা ডেটা ভিজ্যুয়ালাইজ করার জন্য একটি পূর্ব-নির্মিত Looker Studio টেমপ্লেট প্রদান করে।ভিউ তৈরি করুন
BigQuery UI ব্যবহার করে, আপনি একটি ভিউ তৈরি করতে পারেন, যা একটি SQL কোয়েরি দ্বারা সংজ্ঞায়িত একটি ভার্চুয়াল টেবিল। বিভিন্ন ধরণের ভিউ এবং কীভাবে সেগুলি তৈরি করবেন সে সম্পর্কে বিস্তারিত নির্দেশাবলীর জন্য, BigQuery ডকুমেন্টেশন দেখুন।Crashlytics -নির্দিষ্ট ডেটা ফায়ারবেস সেশন ডেটার সাথে একত্রিত করুন
Crashlytics ডেটা এক্সপোর্ট সেট আপ করার সময় আপনি ফায়ারবেস সেশন ডেটা এক্সপোর্ট করতে পারেন। ক্র্যাশ-মুক্ত ব্যবহারকারী এবং ক্র্যাশ-মুক্ত সেশন সম্পর্কে আরও ভাল ধারণা পেতে এই সেশন ডেটা ব্যবহার করুন।
BigQuery তে স্ট্রিমিং এক্সপোর্টের সুবিধা
ডিফল্টরূপে, ডেটা দৈনিক ব্যাচ এক্সপোর্টে BigQuery তে রপ্তানি করা হয়। এছাড়াও, আপনি BigQuery স্ট্রিমিং এর মাধ্যমে রিয়েলটাইমে আপনার Crashlytics ডেটা এবং Firebase সেশন স্ট্রিম করতে পারেন। আপনি এটি যেকোনো উদ্দেশ্যে ব্যবহার করতে পারেন যার জন্য লাইভ ডেটা প্রয়োজন, যেমন লাইভ ড্যাশবোর্ডে তথ্য উপস্থাপন করা, লাইভ রোলআউট দেখা, অথবা অ্যালার্ট এবং কাস্টম ওয়ার্কফ্লো ট্রিগার করে এমন অ্যাপ্লিকেশন সমস্যাগুলি পর্যবেক্ষণ করা।
যখন আপনি BigQuery তে স্ট্রিমিং এক্সপোর্ট সক্ষম করবেন, তখন আপনার কাছে রিয়েলটাইম টেবিলও থাকবে (ব্যাচ টেবিল ছাড়াও)। উভয় ধরণের টেবিলের একই ডেটাসেট স্কিমা থাকবে, তবে ব্যাচ টেবিল এবং রিয়েলটাইম টেবিলের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য এখানে রয়েছে:
| ব্যাচ টেবিল | রিয়েলটাইম টেবিল |
|---|---|
|
|
ব্যাচ টেবিলটি দীর্ঘমেয়াদী বিশ্লেষণ এবং সময়ের সাথে সাথে ট্রেন্ড সনাক্তকরণের জন্য আদর্শ কারণ আমরা ইভেন্টগুলি লেখার আগে টেকসইভাবে সংরক্ষণ করি এবং সেগুলি 30 দিন পর্যন্ত টেবিলে ব্যাকফিল করা যেতে পারে*। যখন আমরা আপনার রিয়েলটাইম টেবিলে ডেটা লিখি, তখন আমরা তাৎক্ষণিকভাবে BigQuery এ লিখে ফেলি, এবং তাই এটি লাইভ ড্যাশবোর্ড এবং কাস্টম সতর্কতার জন্য আদর্শ। উভয়ের সুবিধা পেতে এই দুটি টেবিলকে একটি স্টিচিং কোয়েরির সাথে একত্রিত করা যেতে পারে।
ডিফল্টরূপে, রিয়েলটাইম টেবিলের পার্টিশনের মেয়াদ শেষ হওয়ার সময় 30 দিন। এটি কীভাবে পরিবর্তন করবেন তা জানতে, BigQuery ডকুমেন্টেশনে পার্টিশনের মেয়াদ শেষ হওয়ার সময় সেট করুন দেখুন।
* নতুন রপ্তানি পরিকাঠামোতে আপগ্রেড করুন বিভাগে ব্যাকফিল সহায়তা সম্পর্কে বিস্তারিত দেখুন।
BigQuery তে এক্সপোর্ট সক্ষম করুন
Firebase কনসোলে, ইন্টিগ্রেশন পৃষ্ঠায় যান।
BigQuery কার্ডে, লিঙ্ক এ ক্লিক করুন।
BigQuery এ রপ্তানি সক্ষম করতে স্ক্রিনে প্রদর্শিত নির্দেশাবলী অনুসরণ করুন, নিম্নলিখিত বিকল্পগুলি সহ:
ক্র্যাশ-মুক্ত ব্যবহারকারী এবং ক্র্যাশ-মুক্ত সেশন সম্পর্কে আরও ভালো ধারণা পেতে, Firebase সেশন ডেটা এক্সপোর্ট সক্ষম করুন ।
BigQuery তে আপনার Crashlytics ডেটা এবং Firebase সেশন ডেটাতে রিয়েলটাইম অ্যাক্সেস পেতে, স্ট্রিমিং এক্সপোর্ট সক্ষম করুন ।
BigQuery তে এক্সপোর্টের প্রাথমিক সেটআপের সময়ও এই বিকল্পটি সক্রিয় করা যেতে পারে।
Firebase কনসোলে, ইন্টিগ্রেশন পৃষ্ঠায় যান।
BigQuery কার্ডে, Manage এ ক্লিক করুন।
সেশন অন্তর্ভুক্ত করুন চেকবক্সটি নির্বাচন করুন।
এই অ্যাকশনটি আপনার সমস্ত লিঙ্ক করা অ্যাপের জন্য সেশন ডেটা এক্সপোর্ট সক্ষম করে। যদি আপনার স্ট্রিমিং এক্সপোর্ট সক্ষম থাকে, তাহলে এটি রিয়েলটাইমেও সেশন ডেটা এক্সপোর্ট শুরু করবে।
BigQuery তে এক্সপোর্টের প্রাথমিক সেটআপের সময়ও এই বিকল্পটি সক্রিয় করা যেতে পারে।
Firebase কনসোলে, ইন্টিগ্রেশন পৃষ্ঠায় যান।
BigQuery কার্ডে, Manage এ ক্লিক করুন।
স্ট্রিমিং অন্তর্ভুক্ত করুন চেকবক্সটি নির্বাচন করুন।
এই ক্রিয়াটি আপনার সমস্ত লিঙ্ক করা অ্যাপের জন্য স্ট্রিমিং সক্ষম করে। যদি আপনার Firebase সেশন এক্সপোর্ট সক্ষম থাকে, তাহলে এটি সেশন ডেটার জন্যও স্ট্রিমিং এক্সপোর্ট সক্ষম করবে।
রপ্তানি সক্ষম করলে কী হবে?
ফায়ারবেস BigQuery সাথে লিঙ্ক করা অ্যাপগুলি থেকে ডেটা রপ্তানি করে।
সেটআপের সময়, ডিফল্টরূপে, আপনার প্রোজেক্টের সমস্ত অ্যাপ BigQuery এর সাথে লিঙ্ক করা থাকে, তবে আপনি সেটআপের সময় নির্দিষ্ট অ্যাপগুলিকে লিঙ্ক না করার জন্য নির্বাচন করতে পারেন।
আপনার Firebase প্রজেক্টে পরবর্তীতে যে কোনও অ্যাপ যোগ করলে তা স্বয়ংক্রিয়ভাবে BigQuery এর সাথে লিঙ্ক হয়ে যায়।
যেকোনো সময়, আপনি কোন অ্যাপগুলি ডেটা রপ্তানি করবে তা পরিচালনা করতে পারেন।
সেটআপের সময় আপনার নির্বাচিত ডেটাসেট অবস্থানে Firebase ডেটা রপ্তানি করে।
এই অবস্থানটি Crashlytics ডেটাসেট এবং Firebase সেশন ডেটাসেট উভয়ের ক্ষেত্রেই প্রযোজ্য (যদি সেশন ডেটা রপ্তানির জন্য সক্ষম করা থাকে)।
এই অবস্থানটি শুধুমাত্র BigQuery তে রপ্তানি করা ডেটার জন্য প্রযোজ্য, এবং এটি Firebase কনসোলের Crashlytics ড্যাশবোর্ডে বা Android Studio-তে ব্যবহারের জন্য সংরক্ষিত ডেটার অবস্থানকে প্রভাবিত করে না।
একটি ডেটাসেট তৈরি হওয়ার পরে, এর অবস্থান পরিবর্তন করা যাবে না, তবে আপনি ডেটাসেটটি অন্য কোনও স্থানে অনুলিপি করতে পারেন অথবা ম্যানুয়ালি ডেটাসেটটি অন্য কোনও স্থানে স্থানান্তর (পুনরায় তৈরি) করতে পারেন। আরও জানতে, বিদ্যমান রপ্তানির জন্য অবস্থান পরিবর্তন করুন দেখুন।
Firebase আপনার ব্যাচ ডেটার দৈনিক সিঙ্ক BigQuery তে সেট আপ করে।
BigQuery এর সাথে লিঙ্ক করার পরে, প্রাথমিক ব্যাচ ডেটা এক্সপোর্ট করতে ৪৮ ঘন্টা পর্যন্ত সময় লাগতে পারে।
BigQuery তে আপনার নির্ধারিত কোনও এক্সপোর্ট সেট আপ করা থাকুক না কেন, দৈনিক সিঙ্কটি দিনে একবার হয়। মনে রাখবেন যে সিঙ্ক কাজের সময় এবং সময়কাল পরিবর্তিত হতে পারে, তাই আমরা এক্সপোর্টের নির্দিষ্ট সময়ের উপর ভিত্তি করে ডাউনস্ট্রিম অপারেশন বা কাজগুলি শিডিউল করার পরামর্শ দিই না।
Firebase আপনার বিদ্যমান ডেটার একটি কপি BigQuery তে রপ্তানি করে।
প্রতিটি লিঙ্ক করা অ্যাপের জন্য, এই এক্সপোর্টে দৈনিক সিঙ্ক থেকে ডেটা ধারণকারী একটি ব্যাচ টেবিল অন্তর্ভুক্ত থাকে।
আপনি ব্যাচ টেবিলের জন্য গত 30 দিনের ডেটা ব্যাকফিল ম্যানুয়ালি শিডিউল করতে পারেন অথবা BigQuery তে এক্সপোর্ট সক্ষম করার সময় সাম্প্রতিকতম তারিখের জন্য (যেটি সাম্প্রতিকতম)।
মনে রাখবেন যে আপনি যদি ২০২৪ সালের অক্টোবরের মাঝামাঝি সময়ের আগে Crashlytics ডেটা রপ্তানি সক্ষম করে থাকেন, তাহলে আপনি রপ্তানি সক্ষম করার ৩০ দিন আগেও ব্যাকফিল করতে পারবেন।
BigQuery তে স্ট্রিমিং এক্সপোর্ট সক্ষম করলে নিম্নলিখিতগুলি প্রযোজ্য হবে।
প্রতিটি লিঙ্ক করা অ্যাপের নিজস্ব রিয়েলটাইম টেবিল থাকবে যাতে ক্রমাগত আপডেট হওয়া ডেটা থাকবে (দৈনিক ব্যাচ এক্সপোর্টের জন্য অ্যাপের ব্যাচ টেবিল ছাড়াও)।
স্ট্রিমিং সক্ষম করার পরে, ডেটা স্ট্রিমিং শুরু হতে ১ ঘন্টা পর্যন্ত সময় লাগতে পারে।
নিশ্চিত করুন যে আপনি আপনার অ্যাপ থেকে কমপক্ষে দুটি ইভেন্ট Crashlytics এ পাঠিয়েছেন এবং সেগুলি পাঠানোর পর কয়েক মিনিট অপেক্ষা করেছেন।
নিশ্চিত করুন যে আপনার Firebase প্রকল্পটি পে-অ্যাজ-ইউ-গো ব্লেজ প্রাইসিং প্ল্যানে রয়েছে।
আপনি Firebase কনসোলের নীচের বাম কোণে দেখে এটি পরীক্ষা করতে পারেন।দুটি ইভেন্ট পাঠানোর এবং কয়েক মিনিট অপেক্ষা করার পরেও যদি আপনার রিয়েলটাইম টেবিলে কোনও ডেটা না থাকে:
Firebase কনসোলের BigQuery কার্ডে যান।
স্ট্রিমিং এক্সপোর্ট অক্ষম করুন এবং তারপর পুনরায় সক্ষম করুন।
পরিষেবা অ্যাকাউন্টটি নিশ্চিত করুন
service- PROJECT_NUMBER @gcp-sa-crashlytics.iam.gserviceaccount.comআপনার Firebase প্রকল্পে রয়েছে এবং Firebase Crashlytics পরিষেবা এজেন্টের ভূমিকা রয়েছে।
আপনি Google Cloud কনসোলের IAM পৃষ্ঠায় এটি পরীক্ষা করতে পারেন ( Include গুগল-প্রদত্ত ভূমিকা অনুদানের জন্য চেকবক্সটি নির্বাচন করতে ভুলবেন না)।কমপক্ষে দুটি ইভেন্ট Crashlytics এ পাঠান এবং কয়েক মিনিট অপেক্ষা করুন।
যদি আপনি এখনও আপনার রিয়েলটাইম টেবিলে ডেটা দেখতে না পান, তাহলে Firebase Support-এর সাথে যোগাযোগ করুন ।
উদাহরণ কোয়েরি
উদাহরণ ১: ফায়ারবেস সেশন ডেটা ব্যবহার করে ক্র্যাশ-মুক্ত মেট্রিক্স গণনা করুন
আপনার সর্বশেষ সংস্করণে, আপনি একটি গুরুত্বপূর্ণ ব্যবহারকারীর যাত্রায় ক্র্যাশ মোকাবেলা করার জন্য আপনার অ্যাপের একটি বড় সংস্কার শুরু করেছেন। আপনি ব্যবহারকারীদের কাছ থেকে দুর্দান্ত পর্যালোচনা পেয়েছেন, তবে আপনি পরিমাণগত প্রমাণ চান যে আপনার অ্যাপটি আগের চেয়ে আরও স্থিতিশীল।
ক্র্যাশ-মুক্ত মেট্রিক্স এই তথ্য প্রদানে সাহায্য করতে পারে। এই মেট্রিক্সগুলি গুরুত্বপূর্ণ পরিমাপ যা আপনার অ্যাপের সামগ্রিক স্বাস্থ্য বুঝতে সাহায্য করে। Firebase সেশন ডেটা এবং Crashlytics ইভেন্টের সাহায্যে, আপনি একটি মৌলিক প্রশ্নের মাধ্যমে এই মেট্রিক্স গণনা করতে পারেন।
এখানে একটি অ্যান্ড্রয়েড অ্যাপের জন্য উদাহরণ কোয়েরি দেওয়া হল। একটি iOS অ্যাপের জন্য, এর বান্ডেল আইডি এবং IOS (প্যাকেজের নাম এবং ANDROID এর পরিবর্তে) ব্যবহার করুন।
নির্দিষ্ট সংস্করণের জন্য ক্র্যাশ-মুক্ত ব্যবহারকারীরা :
SELECT TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) AS event_date, (1 - (COUNT (DISTINCT installation_uuid) / COUNT (DISTINCT instance_id))) AS CFU FROM `PROJECT_ID.firebase_sessions.PACKAGE_NAME_ANDROID` AS sessions LEFT JOIN `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` AS crashlytics ON TIMESTAMP_TRUNC(_PARTITIONTIME,DAY) = TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) WHERE crashlytics.error_type="FATAL" AND crashlytics.application.display_version="APP_VERSION" AND sessions.application.display_version = "APP_VERSION" GROUP BY event_date ORDER BY event_date
গত সপ্তাহে (গত ১৬৮ ঘন্টা) ক্র্যাশ-মুক্ত সেশন :
SELECT TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) AS event_date, (1 - (COUNT (DISTINCT crashlytics.event_id) / COUNT (DISTINCT sessions.session_id))) AS CFS FROM `PROJECT_ID.firebase_sessions.PACKAGE_NAME_ANDROID` AS sessions LEFT JOIN `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` AS crashlytics ON TIMESTAMP_TRUNC(_PARTITIONTIME,DAY) = TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) WHERE crashlytics.error_type="FATAL" AND _PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR) AND _PARTITIONTIME < CURRENT_TIMESTAMP() GROUP BY event_date ORDER BY event_date
উদাহরণ ২: দিনের বেলায় ক্র্যাশ
যতটা সম্ভব বাগ ঠিক করার চেষ্টা করার পর, আপনার মনে হয় আপনার টিম অবশেষে আপনার নতুন ফটো-শেয়ারিং অ্যাপ চালু করার জন্য প্রস্তুত। তা করার আগে, আপনাকে গত মাসে প্রতিদিন কতবার ক্র্যাশ হয়েছে তা পরীক্ষা করে দেখতে হবে, যাতে নিশ্চিত হতে পারি যে আপনার বাগ-ব্যাশ সময়ের সাথে সাথে অ্যাপটিকে আরও স্থিতিশীল করে তুলেছে।
এখানে একটি Android অ্যাপের জন্য একটি উদাহরণ কোয়েরি দেওয়া হল। একটি iOS অ্যাপের জন্য, এর বান্ডেল আইডি এবং IOS (প্যাকেজের নাম এবং ANDROID এর পরিবর্তে) ব্যবহার করুন।
SELECT COUNT(DISTINCT event_id) AS number_of_crashes, FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` GROUP BY date_of_crashes ORDER BY date_of_crashes DESC LIMIT 30;
উদাহরণ ৩: সবচেয়ে ব্যাপক ক্র্যাশগুলি খুঁজুন
উৎপাদন পরিকল্পনাগুলিকে সঠিকভাবে অগ্রাধিকার দেওয়ার জন্য, আপনাকে আপনার অ্যাপে শীর্ষ ১০টি সর্বাধিক বিস্তৃত ক্র্যাশ খুঁজে বের করতে হবে। আপনি একটি কোয়েরি তৈরি করবেন যা প্রাসঙ্গিক তথ্য প্রদান করে।
এখানে একটি Android অ্যাপের জন্য একটি উদাহরণ কোয়েরি দেওয়া হল। একটি iOS অ্যাপের জন্য, এর বান্ডেল আইডি এবং IOS (প্যাকেজের নাম এবং ANDROID এর পরিবর্তে) ব্যবহার করুন।
SELECT DISTINCT issue_id, COUNT(DISTINCT event_id) AS number_of_crashes, COUNT(DISTINCT installation_uuid) AS number_of_impacted_user, blame_frame.file, blame_frame.line FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(),INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY issue_id, blame_frame.file, blame_frame.line ORDER BY number_of_crashes DESC LIMIT 10;
উদাহরণ ৪: সেরা ১০টি ক্র্যাশিং ডিভাইস
শরৎকাল নতুন ফোনের মরশুম! আপনার কোম্পানি জানে যে এর অর্থ এটি ডিভাইস-নির্দিষ্ট সমস্যার নতুন মরশুম - বিশেষ করে অ্যান্ড্রয়েডের জন্য। আসন্ন সামঞ্জস্যতা সংক্রান্ত উদ্বেগগুলি মোকাবেলা করার জন্য, আপনি একটি প্রশ্ন তৈরি করেছেন যা গত সপ্তাহে (১৬৮ ঘন্টা) সবচেয়ে বেশি ক্র্যাশের সম্মুখীন হওয়া ১০টি ডিভাইস চিহ্নিত করে।
এখানে একটি Android অ্যাপের জন্য একটি উদাহরণ কোয়েরি দেওয়া হল। একটি iOS অ্যাপের জন্য, এর বান্ডেল আইডি এবং IOS (প্যাকেজের নাম এবং ANDROID এর পরিবর্তে) ব্যবহার করুন।
SELECT device.model, COUNT(DISTINCT event_id) AS number_of_crashes FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY device.model ORDER BY number_of_crashes DESC LIMIT 10;
উদাহরণ ৫: কাস্টম কী অনুসারে ফিল্টার করুন
আপনি একজন গেম ডেভেলপার যিনি জানতে চান আপনার গেমের কোন স্তরটি সবচেয়ে বেশি ক্র্যাশের সম্মুখীন হয়।
সেই পরিসংখ্যান ট্র্যাক করতে সাহায্য করার জন্য, আপনি current_level নামে একটি কাস্টম Crashlytics কী সেট করেন এবং ব্যবহারকারী যখনই নতুন স্তরে পৌঁছান তখনই এটি আপডেট করেন।
সুইফট
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
অবজেক্টিভ-সি
CrashlyticsKit setIntValue:3 forKey:@"current_level";
জাভা
Crashlytics.setInt("current_level", 3);
BigQuery তে এক্সপোর্ট করার সময়, আপনি প্রতিটি ক্র্যাশ ইভেন্টের সাথে সম্পর্কিত current_level মানের বিতরণ রিপোর্ট করার জন্য একটি কোয়েরি লিখতে পারেন।
এখানে একটি Android অ্যাপের জন্য একটি উদাহরণ কোয়েরি দেওয়া হল। একটি iOS অ্যাপের জন্য, এর বান্ডেল আইডি এবং IOS (প্যাকেজের নাম এবং ANDROID এর পরিবর্তে) ব্যবহার করুন।
SELECT
COUNT(DISTINCT event_id) AS num_of_crashes,
value
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
UNNEST(custom_keys)
WHERE
key = "current_level"
GROUP BY
key,
value
ORDER BY
num_of_crashes DESCউদাহরণ ৬: ব্যবহারকারী আইডি নিষ্কাশন
আপনার কাছে একটি অ্যান্ড্রয়েড অ্যাপ আছে যা প্রাথমিক অ্যাক্সেসে রয়েছে। আপনার বেশিরভাগ ব্যবহারকারী এটি পছন্দ করেন, কিন্তু তিনজন অস্বাভাবিক সংখ্যক ক্র্যাশের সম্মুখীন হয়েছেন। সমস্যার গভীরে যাওয়ার জন্য, আপনি একটি কোয়েরি লেখেন যা সেই ব্যবহারকারীদের জন্য তাদের ব্যবহারকারী আইডি ব্যবহার করে সমস্ত ক্র্যাশ ইভেন্টগুলিকে টেনে আনে।
এখানে একটি Android অ্যাপের জন্য একটি উদাহরণ কোয়েরি দেওয়া হল। একটি iOS অ্যাপের জন্য, এর বান্ডেল আইডি এবং IOS (প্যাকেজের নাম এবং ANDROID এর পরিবর্তে) ব্যবহার করুন।
SELECT *
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
user.id IN ("USER_ID_1", "USER_ID_2", "USER_ID_3")
ORDER BY
user.id
উদাহরণ ৭: একটি নির্দিষ্ট ক্র্যাশ সমস্যার সম্মুখীন সকল ব্যবহারকারীকে খুঁজুন
আপনার টিম ভুলবশত বিটা পরীক্ষকদের একটি গ্রুপে একটি গুরুত্বপূর্ণ বাগ প্রকাশ করেছে। আপনার টিম উপরে "সবচেয়ে ব্যাপক ক্র্যাশ খুঁজুন" উদাহরণ থেকে কোয়েরি ব্যবহার করে নির্দিষ্ট ক্র্যাশ সমস্যা আইডি সনাক্ত করতে সক্ষম হয়েছে। এখন আপনার টিম এই ক্র্যাশ দ্বারা প্রভাবিত অ্যাপ ব্যবহারকারীদের তালিকা বের করার জন্য একটি কোয়েরি চালাতে চায়।
এখানে একটি Android অ্যাপের জন্য একটি উদাহরণ কোয়েরি দেওয়া হল। একটি iOS অ্যাপের জন্য, এর বান্ডেল আইডি এবং IOS (প্যাকেজের নাম এবং ANDROID এর পরিবর্তে) ব্যবহার করুন।
SELECT user.id as user_id
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
issue_id = "ISSUE_ID"
AND application.display_version = "APP_VERSION"
AND user.id != ""
ORDER BY
user.id;উদাহরণ ৮: ক্র্যাশ সমস্যার দ্বারা প্রভাবিত ব্যবহারকারীর সংখ্যা, দেশ অনুসারে বিভক্ত
আপনার টিম একটি নতুন রিলিজ চালু করার সময় একটি গুরুতর বাগ সনাক্ত করেছে। আপনি উপরে "সবচেয়ে ব্যাপক ক্র্যাশ খুঁজুন" উদাহরণ থেকে কোয়েরিটি ব্যবহার করে নির্দিষ্ট ক্র্যাশ সমস্যা আইডি সনাক্ত করতে সক্ষম হয়েছেন। আপনার টিম এখন দেখতে চাইবে যে এই ক্র্যাশটি বিশ্বের বিভিন্ন দেশের ব্যবহারকারীদের মধ্যে ছড়িয়ে পড়েছে কিনা।
এই কোয়েরিটি লেখার জন্য, আপনার টিমকে নিম্নলিখিতগুলি করতে হবে:
BigQuery তে Google Analytics ডেটা রপ্তানি সক্ষম করুন। BigQuery-তে প্রকল্প ডেটা রপ্তানি দেখুন।
Google Analytics SDK এবং Crashlytics SDK উভয়ের মধ্যেই একটি ব্যবহারকারী আইডি পাস করতে আপনার অ্যাপ আপডেট করুন।
সুইফট
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");অবজেক্টিভ-সি
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";জাভা
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");Crashlytics ডেটাসেটে ক্র্যাশ থাকা অবস্থায় Google Analytics ডেটাসেটে ইভেন্টগুলিতে যোগদানের জন্য ব্যবহারকারী আইডি ক্ষেত্র ব্যবহার করে এমন একটি কোয়েরি লিখুন।
এখানে একটি Android অ্যাপের জন্য একটি উদাহরণ কোয়েরি দেওয়া হল। একটি iOS অ্যাপের জন্য, এর বান্ডেল আইডি এবং
IOS(প্যাকেজের নাম এবংANDROIDএর পরিবর্তে) ব্যবহার করুন।SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` c INNER JOIN `PROJECT_ID.analytics_TABLE_NAME.events_*` a on c.user.id = a.user_id WHERE c.issue_id = "ISSUE_ID" AND a._TABLE_SUFFIX BETWEEN '20190101' AND '20200101' GROUP BY c.issue_id, a.geo.country, c.user.id
উদাহরণ ৯: আজ পর্যন্ত সেরা ৫টি সংখ্যা
এখানে একটি Android অ্যাপের জন্য একটি উদাহরণ কোয়েরি দেওয়া হল। একটি iOS অ্যাপের জন্য, এর বান্ডেল আইডি এবং IOS (প্যাকেজের নাম এবং ANDROID এর পরিবর্তে) ব্যবহার করুন।
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME` WHERE DATE(event_timestamp) = CURRENT_DATE() GROUP BY issue_id ORDER BY events DESC LIMIT 5;
উদাহরণ ১০: DATE থেকে আজ পর্যন্ত শীর্ষ ৫টি সংখ্যা, যার মধ্যে আজও রয়েছে
নির্ভরযোগ্য ব্যাচ ডেটাতে রিয়েলটাইম তথ্য যোগ করার জন্য আপনি ব্যাচ এবং রিয়েলটাইম টেবিলগুলিকে একটি স্টিচিং কোয়েরির সাথে একত্রিত করতে পারেন। যেহেতু event_id একটি প্রাথমিক কী, তাই আপনি দুটি টেবিল থেকে যেকোনো সাধারণ ইভেন্ট বাদ দিতে DISTINCT event_id ব্যবহার করতে পারেন।
এখানে একটি Android অ্যাপের জন্য একটি উদাহরণ কোয়েরি দেওয়া হল। একটি iOS অ্যাপের জন্য, এর বান্ডেল আইডি এবং IOS (প্যাকেজের নাম এবং ANDROID এর পরিবর্তে) ব্যবহার করুন।
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM ( SELECT issue_id, event_id, event_timestamp FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME` UNION ALL SELECT issue_id, event_id, event_timestamp FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`) WHERE event_timestamp >= PARSE_TIMESTAMP("%Y_%m_%d", "YYYY_MM_DD") GROUP BY issue_id ORDER BY events DESC LIMIT 5;
Looker Studio সাহায্যে এক্সপোর্ট করা Crashlytics ডেটা ভিজ্যুয়ালাইজ করুন
Looker Studio আপনার BigQuery তে থাকা Crashlytics ডেটাসেটগুলিকে এমন প্রতিবেদনে রূপান্তরিত করে যা পড়া সহজ, ভাগ করা সহজ এবং সম্পূর্ণরূপে কাস্টমাইজযোগ্য।
Looker Studio ব্যবহার সম্পর্কে আরও জানতে, তাদের স্বাগত নির্দেশিকাটি দেখুন।
একটি Crashlytics রিপোর্ট টেমপ্লেট ব্যবহার করুন
Looker Studio Crashlytics জন্য একটি নমুনা প্রতিবেদন রয়েছে যাতে এক্সপোর্ট করা Crashlytics BigQuery স্কিমা থেকে মাত্রা এবং মেট্রিক্সের একটি বিস্তৃত সেট অন্তর্ভুক্ত রয়েছে। যদি আপনি BigQuery Crashlytics স্ট্রিমিং এক্সপোর্ট সক্ষম করে থাকেন, তাহলে আপনি Looker Studio টেমপ্লেটের রিয়েলটাইম ট্রেন্ডস পৃষ্ঠায় সেই ডেটা দেখতে পারেন। আপনি আপনার নিজস্ব অ্যাপের কাঁচা ক্র্যাশ ডেটার উপর ভিত্তি করে দ্রুত নতুন প্রতিবেদন এবং ভিজ্যুয়ালাইজেশন তৈরি করতে নমুনাটিকে একটি টেমপ্লেট হিসাবে ব্যবহার করতে পারেন:
উপরের ডানদিকে কোণায় "টেমপ্লেট ব্যবহার করুন" এ ক্লিক করুন।
নতুন ডেটা সোর্স ড্রপ ডাউনে, নতুন ডেটা সোর্স তৈরি করুন নির্বাচন করুন।
BigQuery কার্ডে Select এ ক্লিক করুন।
My Projects > PROJECT_ID > firebase_crashlytics > TABLE_NAME বেছে নিয়ে এক্সপোর্ট করা Crashlytics ডেটা ধারণকারী একটি টেবিল নির্বাচন করুন।
আপনার ব্যাচ টেবিলটি সর্বদা নির্বাচনের জন্য উপলব্ধ। যদি Crashlytics স্ট্রিমিং BigQuery তে এক্সপোর্ট সক্ষম করা থাকে, তাহলে আপনি পরিবর্তে আপনার রিয়েলটাইম টেবিলটি নির্বাচন করতে পারেন।
কনফিগারেশনের অধীনে, Crashlytics টেমপ্লেট স্তরটি ডিফল্টে সেট করুন।
নতুন ডেটা উৎস তৈরি করতে Connect এ ক্লিক করুন।
Crashlytics টেমপ্লেটে ফিরে যেতে Add to Report এ ক্লিক করুন।
অবশেষে, Crashlytics Looker Studio Dashboard টেমপ্লেটের আপনার কপি তৈরি করতে Create Report এ ক্লিক করুন।
BigQuery তে স্কিমাটি বুঝুন
আপনার এক্সপোর্ট করা ডেটার জন্য Firebase BigQuery তে নতুন ডেটাসেট তৈরি করে:
ফায়ারবেস সেশন ডেটাসেট (যদি সেশন ডেটা রপ্তানির জন্য সক্ষম করা থাকে)
Crashlytics ডেটাসেট
Crashlytics ডেটা firebase_crashlytics নামক একটি BigQuery ডেটাসেটে রপ্তানি করা হয়। ডেটাসেটটি আপনার সম্পূর্ণ প্রকল্পকে কভার করে, এমনকি যদি এতে একাধিক অ্যাপ থাকে।
টেবিল
ডিফল্টরূপে, Firebase আপনার প্রকল্পের প্রতিটি অ্যাপের জন্য Crashlytics ডেটাসেটের ভিতরে পৃথক টেবিল তৈরি করে যা BigQuery এর সাথে লিঙ্ক করা আছে।
অ্যাপের শনাক্তকারীর উপর ভিত্তি করে টেবিলগুলির নামকরণ করা হয় (পিরিয়ডগুলিকে আন্ডারস্কোরে রূপান্তরিত করে) এবং অ্যাপের প্ল্যাটফর্মের সাথে যুক্ত করা হয় ( _IOS অথবা _ANDROID )। উদাহরণস্বরূপ, com.google.test প্যাকেজ নামের একটি অ্যান্ড্রয়েড অ্যাপের ডেটা com_google_test_ANDROID নামক একটি টেবিলে থাকবে।
যদি BigQuery তে স্ট্রিমিং এক্সপোর্ট সক্ষম করা থাকে, তাহলে ডেটা রিয়েলটাইমে
_REALTIME(উদাহরণস্বরূপ,com_google_test_ANDROID_REALTIME) এর সাথে সংযুক্ত একটি টেবিলে স্ট্রিম করা হবে।একটি টেবিলের প্রতিটি সারি অ্যাপে ঘটে যাওয়া একটি ইভেন্টকে প্রতিনিধিত্ব করে, যার মধ্যে রয়েছে ক্র্যাশ, অ-মারাত্মক ত্রুটি এবং ANR।
টেবিলগুলিতে আপনার অ্যাপে আপনার দ্বারা সংজ্ঞায়িত যেকোনো কাস্টম Crashlytics কী ছাড়াও Crashlytics ডেটার একটি স্ট্যান্ডার্ড সেট রয়েছে।
সারি
একটি টেবিলের প্রতিটি সারি অ্যাপটির সম্মুখীন হওয়া একটি ত্রুটির প্রতিনিধিত্ব করে।
কলাম
ক্র্যাশ, অ-মারাত্মক ত্রুটি এবং ANR-এর জন্য একটি টেবিলের কলামগুলি অভিন্ন।
যদি BigQuery তে স্ট্রিমিং এক্সপোর্ট সক্ষম করা থাকে, তাহলে রিয়েলটাইম টেবিলে ব্যাচ টেবিলের মতো একই কলাম থাকবে।
আপনার সারিতে কলাম থাকতে পারে যা এমন ইভেন্টগুলিকে প্রতিনিধিত্ব করে যার স্ট্যাক ট্রেস নেই।
রপ্তানি করা Crashlytics ডেটার জন্য টেবিলের কলামগুলি এখানে দেওয়া হল:
| ক্ষেত্রের নাম | ডেটা টাইপ | বিবরণ |
|---|---|---|
app_orientation | স্ট্রিং | উদাহরণস্বরূপ, PORTRAIT , LANDSCAPE , FACE_UP , FACE_DOWN , ইত্যাদি। |
application | রেকর্ড | যে অ্যাপটি ইভেন্টটি তৈরি করেছে |
application.build_version | স্ট্রিং | অ্যাপটির বিল্ড ভার্সন |
application.display_version | স্ট্রিং | |
blame_frame | রেকর্ড | ক্র্যাশ বা ত্রুটির মূল কারণ হিসেবে চিহ্নিত ফ্রেম |
blame_frame.address | INT64 সম্পর্কে | বাইনারি ছবিতে কোডটি থাকা ঠিকানাটি জাভা ফ্রেমের জন্য আনসেট করুন |
blame_frame.blamed | বুলিয়ান | Crashlytics নির্ধারণ করেছে যে এই ফ্রেমটি ক্র্যাশের কারণ নাকি ত্রুটি? |
blame_frame.file | স্ট্রিং | ফ্রেম ফাইলের নাম |
blame_frame.library | স্ট্রিং | ফ্রেমটি অন্তর্ভুক্ত লাইব্রেরির প্রদর্শন নাম |
blame_frame.line | INT64 সম্পর্কে | ফ্রেমের ফাইলের লাইন নম্বর |
blame_frame.offset | INT64 সম্পর্কে | কোড ধারণকারী বাইনারি ছবিতে বাইট অফসেট করা হয় জাভা ব্যতিক্রমগুলির জন্য সেট না করা |
blame_frame.owner | স্ট্রিং | উদাহরণস্বরূপ, DEVELOPER , VENDOR , RUNTIME , PLATFORM , অথবা SYSTEM |
blame_frame.symbol | স্ট্রিং | হাইড্রেটেড প্রতীক, অথবা যদি এটি অহাইড্রেটেড হয় তবে কাঁচা প্রতীক |
breadcrumbs | পুনরাবৃত্তি রেকর্ড | টাইমস্ট্যাম্পড Google Analytics ব্রেডক্রাম্বস , যদি সক্ষম থাকে |
breadcrumbs.name | স্ট্রিং | ব্রেডক্রাম্বের সাথে সম্পর্কিত নাম |
breadcrumbs.params | পুনরাবৃত্তি রেকর্ড | ব্রেডক্রাম্বের সাথে সম্পর্কিত পরামিতি |
breadcrumbs.params.key | স্ট্রিং | ব্রেডক্রাম্বের সাথে যুক্ত একটি প্যারামিটার কী |
breadcrumbs.params.value | স্ট্রিং | ব্রেডক্রাম্বের সাথে সম্পর্কিত একটি প্যারামিটার মান |
breadcrumbs.timestamp | টাইমস্ট্যাম্প | ব্রেডক্রাম্বের সাথে সম্পর্কিত টাইমস্ট্যাম্প |
bundle_identifier | স্ট্রিং | Firebase প্রকল্পে নিবন্ধিত অ্যাপের অনন্য শনাক্তকারী (উদাহরণস্বরূপ,com.google.gmail )অ্যাপল প্ল্যাটফর্ম অ্যাপের জন্য, এটি অ্যাপের বান্ডেল আইডি। অ্যান্ড্রয়েড অ্যাপের জন্য, এটি অ্যাপটির প্যাকেজ নাম। |
crashlytics_sdk_versions | স্ট্রিং | Crashlytics SDK সংস্করণ যা ইভেন্টটি তৈরি করেছে |
custom_keys | পুনরাবৃত্তি রেকর্ড | ডেভেলপার-সংজ্ঞায়িত কী-মান জোড়া |
custom_keys.key | স্ট্রিং | একটি ডেভেলপার-সংজ্ঞায়িত কী |
custom_keys.value | স্ট্রিং | একটি ডেভেলপার-সংজ্ঞায়িত মান |
device | রেকর্ড | যে ডিভাইসে ঘটনাটি ঘটেছে |
device_orientation | স্ট্রিং | উদাহরণস্বরূপ, PORTRAIT , LANDSCAPE , FACE_UP , FACE_DOWN , ইত্যাদি। |
device.architecture | স্ট্রিং | উদাহরণস্বরূপ, X86_32 , X86_64 , ARMV7 , ARM64 , ARMV7S , অথবা ARMV7K |
device.manufacturer | স্ট্রিং | ডিভাইস প্রস্তুতকারক |
device.model | স্ট্রিং | ডিভাইস মডেল |
error | পুনরাবৃত্তি রেকর্ড | (শুধুমাত্র অ্যাপল অ্যাপের জন্য) মারাত্মক নয় এমন ত্রুটি |
error_type | স্ট্রিং | ইভেন্টের ত্রুটির ধরণ (উদাহরণস্বরূপ, FATAL , NON_FATAL , ANR , ইত্যাদি) |
error.blamed | বুলিয়ান | Crashlytics নির্ধারণ করেছে যে এই ফ্রেমটিই ত্রুটির কারণ কিনা |
error.code | INT64 সম্পর্কে | অ্যাপের কাস্টম লগ করা NSError-এর সাথে সম্পর্কিত ত্রুটি কোড |
error.frames | পুনরাবৃত্তি রেকর্ড | স্ট্যাকট্রেসের ফ্রেমগুলি |
error.frames.address | INT64 সম্পর্কে | বাইনারি ছবিতে কোডটি থাকা ঠিকানাটি |
error.frames.blamed | বুলিয়ান | Crashlytics নির্ধারণ করেছে যে এই ফ্রেমটিই ত্রুটির কারণ কিনা |
error.frames.file | স্ট্রিং | ফ্রেম ফাইলের নাম |
error.frames.library | স্ট্রিং | ফ্রেমটি অন্তর্ভুক্ত লাইব্রেরির প্রদর্শন নাম |
error.frames.line | INT64 সম্পর্কে | ফ্রেমের ফাইলের লাইন নম্বর |
error.frames.offset | INT64 সম্পর্কে | কোড ধারণকারী বাইনারি ছবিতে বাইট অফসেট করা হয় |
error.frames.owner | স্ট্রিং | উদাহরণস্বরূপ, DEVELOPER , VENDOR , RUNTIME , PLATFORM , অথবা SYSTEM |
error.frames.symbol | স্ট্রিং | হাইড্রেটেড প্রতীক, অথবা যদি এটি অহাইড্রেটেড হয় তবে কাঁচা প্রতীক |
error.queue_name | স্ট্রিং | থ্রেডটি যে সারিতে চলছিল |
error.subtitle | স্ট্রিং | থ্রেডের সাবটাইটেল |
error.title | স্ট্রিং | থ্রেডের শিরোনাম |
event_id | স্ট্রিং | ইভেন্টের জন্য অনন্য আইডি |
event_timestamp | টাইমস্ট্যাম্প | যখন ঘটনাটি ঘটেছিল |
exceptions | পুনরাবৃত্তি রেকর্ড | (শুধুমাত্র অ্যান্ড্রয়েড) এই ইভেন্টের সময় ঘটে যাওয়া ব্যতিক্রমগুলি। নেস্টেড ব্যতিক্রমগুলি বিপরীত কালানুক্রমিক ক্রমে উপস্থাপন করা হয়, যার অর্থ হল শেষ রেকর্ডটি হল প্রথম নিক্ষেপ করা ব্যতিক্রম। |
exceptions.blamed | বুলিয়ান | যদি Crashlytics নির্ধারণ করে যে ব্যতিক্রমটি ত্রুটি বা ক্র্যাশের জন্য দায়ী, তাহলে True হবে। |
exceptions.exception_message | স্ট্রিং | ব্যতিক্রমের সাথে সম্পর্কিত একটি বার্তা |
exceptions.frames | পুনরাবৃত্তি রেকর্ড | ব্যতিক্রমের সাথে সম্পর্কিত ফ্রেমগুলি |
exceptions.frames.address | INT64 সম্পর্কে | বাইনারি ছবিতে কোডটি থাকা ঠিকানাটি জাভা ফ্রেমের জন্য আনসেট করুন |
exceptions.frames.blamed | বুলিয়ান | Crashlytics নির্ধারণ করেছে যে এই ফ্রেমটি ক্র্যাশের কারণ নাকি ত্রুটি? |
exceptions.frames.file | স্ট্রিং | ফ্রেম ফাইলের নাম |
exceptions.frames.library | স্ট্রিং | ফ্রেমটি অন্তর্ভুক্ত লাইব্রেরির প্রদর্শন নাম |
exceptions.frames.line | INT64 সম্পর্কে | ফ্রেমের ফাইলের লাইন নম্বর |
exceptions.frames.offset | INT64 সম্পর্কে | কোড ধারণকারী বাইনারি ছবিতে বাইট অফসেট করা হয় জাভা ব্যতিক্রমগুলির জন্য সেট না করা |
exceptions.frames.owner | স্ট্রিং | উদাহরণস্বরূপ, DEVELOPER , VENDOR , RUNTIME , PLATFORM , অথবা SYSTEM |
exceptions.frames.symbol | স্ট্রিং | হাইড্রেটেড প্রতীক, অথবা যদি এটি অহাইড্রেটেড হয় তবে কাঁচা প্রতীক |
exceptions.nested | বুলিয়ান | শেষবারের মতো নিক্ষেপ করা ব্যতিক্রম (অর্থাৎ প্রথম রেকর্ড) ছাড়া সকলের জন্য সত্য |
exceptions.subtitle | স্ট্রিং | থ্রেডের সাবটাইটেল |
exceptions.title | স্ট্রিং | থ্রেডের শিরোনাম |
exceptions.type | স্ট্রিং | ব্যতিক্রমের ধরণ (উদাহরণস্বরূপ,java.lang.IllegalStateException) |
firebase_session_id | স্ট্রিং | Crashlytics থেকে ইভেন্টে ম্যাপ করা Firebase সেশনের জন্য স্বয়ংক্রিয়ভাবে তৈরি হওয়া আইডি |
installation_uuid | স্ট্রিং | একটি অনন্য অ্যাপ এবং ডিভাইস ইনস্টলেশন শনাক্তকারী একটি আইডি |
is_fatal | বুলিয়ান | অ্যাপটি ক্র্যাশ হয়েছে কিনা |
issue_id | স্ট্রিং | ইভেন্টের সাথে সম্পর্কিত সমস্যা |
logs | পুনরাবৃত্তি রেকর্ড | Crashlytics লগার দ্বারা তৈরি টাইমস্ট্যাম্পড লগ বার্তা, যদি সক্ষম করা থাকে |
logs.message | স্ট্রিং | লগ করা বার্তা |
logs.timestamp | টাইমস্ট্যাম্প | যখন লগ তৈরি করা হয়েছিল |
memory | রেকর্ড | ডিভাইসের মেমরির অবস্থা |
memory.free | INT64 সম্পর্কে | অবশিষ্ট মেমোরির বাইট |
memory.used | INT64 সম্পর্কে | ব্যবহৃত মেমোরির বাইট |
operating_system | রেকর্ড | ডিভাইসের অপারেটিং সিস্টেমের বিশদ বিবরণ |
operating_system.device_type | স্ট্রিং | ডিভাইসের ধরণ (যেমন, MOBILE , TABLET , TV , ইত্যাদি); যা "ডিভাইস বিভাগ" নামেও পরিচিত। |
operating_system.display_version | স্ট্রিং | ডিভাইসে থাকা OS এর সংস্করণ |
operating_system.modification_state | স্ট্রিং | ডিভাইসটি পরিবর্তন করা হয়েছে কিনা (উদাহরণস্বরূপ, একটি জেলব্রোকেন অ্যাপ MODIFIED এবং একটি রুটেড অ্যাপ UNMODIFIED ) |
operating_system.name | স্ট্রিং | ডিভাইসের অপারেটিং সিস্টেমের নাম |
operating_system.type | স্ট্রিং | (শুধুমাত্র অ্যাপল অ্যাপস) ডিভাইসে চলমান অপারেটিং সিস্টেমের ধরণ (উদাহরণস্বরূপ, IOS , MACOS , ইত্যাদি) |
platform | স্ট্রিং | Firebase প্রকল্পে নিবন্ধিত অ্যাপের প্ল্যাটফর্ম (বৈধ মান: IOS বা ANDROID ) |
process_state | স্ট্রিং | BACKGROUND বা FOREGROUND |
storage | রেকর্ড | ডিভাইসের স্থায়ী স্টোরেজ |
storage.free | INT64 সম্পর্কে | বাইট স্টোরেজ বাকি আছে |
storage.used | INT64 সম্পর্কে | ব্যবহৃত স্টোরেজের বাইট |
threads | পুনরাবৃত্তি রেকর্ড | ইভেন্টের সময় উপস্থিত থ্রেডগুলি |
threads.blamed | বুলিয়ান | Crashlytics নির্ধারণ করেছে যে এই ফ্রেমটি ক্র্যাশের কারণ নাকি ত্রুটি? |
threads.code | INT64 সম্পর্কে | (শুধুমাত্র অ্যাপল অ্যাপস) অ্যাপ্লিকেশনের কাস্টম লগ করা NSError এর ত্রুটি কোড |
threads.crash_address | INT64 সম্পর্কে | যে সিগন্যালের কারণে অ্যাপ্লিকেশনটি ক্র্যাশ হয়েছে তার ঠিকানা; শুধুমাত্র ক্র্যাশ করা নেটিভ থ্রেডগুলিতে উপস্থিত থাকে |
threads.crashed | বুলিয়ান | থ্রেডটি ক্র্যাশ হয়েছে কিনা |
threads.frames | পুনরাবৃত্তি রেকর্ড | সুতার ফ্রেমগুলো |
threads.frames.address | INT64 সম্পর্কে | বাইনারি ছবিতে কোডটি থাকা ঠিকানাটি |
threads.frames.blamed | বুলিয়ান | Crashlytics নির্ধারণ করেছে যে এই ফ্রেমটিই ত্রুটির কারণ কিনা |
threads.frames.file | স্ট্রিং | ফ্রেম ফাইলের নাম |
threads.frames.library | স্ট্রিং | ফ্রেমটি অন্তর্ভুক্ত লাইব্রেরির প্রদর্শন নাম |
threads.frames.line | INT64 সম্পর্কে | ফ্রেমের ফাইলের লাইন নম্বর |
threads.frames.offset | INT64 সম্পর্কে | কোড ধারণকারী বাইনারি ছবিতে বাইট অফসেট করা হয় |
threads.frames.owner | স্ট্রিং | উদাহরণস্বরূপ, DEVELOPER , VENDOR , RUNTIME , PLATFORM , অথবা SYSTEM |
threads.frames.symbol | স্ট্রিং | হাইড্রেটেড প্রতীক, অথবা যদি এটি অহাইড্রেটেড হয় তবে কাঁচা প্রতীক |
threads.queue_name | স্ট্রিং | (শুধুমাত্র অ্যাপল অ্যাপস) থ্রেডটি যে সারিতে চলছে |
threads.signal_code | স্ট্রিং | অ্যাপটি ক্র্যাশ করার জন্য দায়ী সিগন্যালের কোড; শুধুমাত্র ক্র্যাশ করা নেটিভ থ্রেডগুলিতে উপস্থিত থাকে |
threads.signal_name | স্ট্রিং | যে সিগন্যালের কারণে অ্যাপটি ক্র্যাশ হয়েছে তার নাম, শুধুমাত্র ক্র্যাশ করা নেটিভ থ্রেডগুলিতে উপস্থিত। |
threads.subtitle | স্ট্রিং | থ্রেডের সাবটাইটেল |
threads.thread_name | স্ট্রিং | থ্রেডের নাম |
threads.title | স্ট্রিং | থ্রেডের শিরোনাম |
unity_metadata.debug_build | বুলিয়ান | যদি এটি একটি ডিবাগ বিল্ড হয় |
unity_metadata.graphics_copy_texture_support | স্ট্রিং | ইউনিটি API- তে সংজ্ঞায়িত গ্রাফিক্স টেক্সচার কপি করার জন্য সমর্থন। |
unity_metadata.graphics_device_id | INT64 সম্পর্কে | গ্রাফিক্স ডিভাইসের শনাক্তকারী |
unity_metadata.graphics_device_name | স্ট্রিং | গ্রাফিক্স ডিভাইসের নাম |
unity_metadata.graphics_device_type | স্ট্রিং | গ্রাফিক্স ডিভাইসের ধরণ |
unity_metadata.graphics_device_vendor_id | INT64 সম্পর্কে | গ্রাফিক্স প্রসেসরের বিক্রেতার শনাক্তকারী |
unity_metadata.graphics_device_vendor | স্ট্রিং | গ্রাফিক্স ডিভাইসের বিক্রেতা |
unity_metadata.graphics_device_version | স্ট্রিং | গ্রাফিক্স ডিভাইসের সংস্করণ |
unity_metadata.graphics_max_texture_size | INT64 সম্পর্কে | টেক্সচার রেন্ডার করার জন্য নিবেদিত সর্বোচ্চ আকার |
unity_metadata.graphics_memory_size_mb | INT64 সম্পর্কে | গ্রাফিক্স মেমোরি, মেগাবাইট |
unity_metadata.graphics_render_target_count | INT64 সম্পর্কে | গ্রাফিকাল রেন্ডারিং লক্ষ্যমাত্রার সংখ্যা |
unity_metadata.graphics_shader_level | INT64 সম্পর্কে | গ্রাফিক্সের শেডার লেভেল |
unity_metadata.processor_count | INT64 সম্পর্কে | প্রসেসরের সংখ্যা (কোর) |
unity_metadata.processor_frequency_mhz | INT64 সম্পর্কে | প্রসেসরের ফ্রিকোয়েন্সি (গুলি) MHz এ |
unity_metadata.processor_type | স্ট্রিং | প্রসেসরের ধরণ |
unity_metadata.screen_refresh_rate_hz | INT64 সম্পর্কে | স্ক্রিনের রিফ্রেশ রেট Hz-এ |
unity_metadata.screen_resolution_dpi | স্ট্রিং | একটি ভাসমান বিন্দু সংখ্যা হিসেবে পর্দার DPI |
unity_metadata.screen_size_px | স্ট্রিং | পিক্সেলে স্ক্রিনের আকার, প্রস্থ x উচ্চতা হিসাবে ফর্ম্যাট করা হয়েছে |
unity_metadata.system_memory_size_mb | INT64 সম্পর্কে | সিস্টেমের মেমোরির আকার Mb তে |
unity_metadata.unity_version | স্ট্রিং | এই ডিভাইসে চলমান ইউনিটির সংস্করণ |
user | রেকর্ড | (ঐচ্ছিক) অ্যাপের ব্যবহারকারী সম্পর্কে সংগৃহীত তথ্য |
user.email | স্ট্রিং | (ঐচ্ছিক) ব্যবহারকারীর ইমেল ঠিকানা |
user.id | স্ট্রিং | (ঐচ্ছিক) ব্যবহারকারীর সাথে সম্পর্কিত একটি অ্যাপ-নির্দিষ্ট আইডি |
user.name | স্ট্রিং | (ঐচ্ছিক) ব্যবহারকারীর নাম |
variant_id | স্ট্রিং | এই ইভেন্টের সাথে সম্পর্কিত সমস্যার ধরণ মনে রাখবেন যে সমস্ত ইভেন্টের কোনও সম্পর্কিত সমস্যার বৈকল্পিক থাকে না। |
ফায়ারবেস সেশন ডেটাসেট
Firebase সেশন ডেটা firebase_sessions নামক একটি BigQuery ডেটাসেটে রপ্তানি করা হয়। ডেটাসেটটি আপনার সম্পূর্ণ প্রকল্পকে কভার করে, এমনকি যদি এতে একাধিক অ্যাপ থাকে।
টেবিল
ডিফল্টরূপে, Firebase আপনার প্রকল্পের প্রতিটি অ্যাপের জন্য Firebase সেশন ডেটাসেটের ভিতরে পৃথক টেবিল তৈরি করে যা BigQuery এর সাথে লিঙ্ক করা আছে।
অ্যাপের শনাক্তকারীর উপর ভিত্তি করে টেবিলগুলির নামকরণ করা হয় (পিরিয়ডগুলিকে আন্ডারস্কোরে রূপান্তরিত করে) এবং অ্যাপের প্ল্যাটফর্মের সাথে যুক্ত করা হয় ( _IOS অথবা _ANDROID )। উদাহরণস্বরূপ, com.google.test প্যাকেজ নামের একটি অ্যান্ড্রয়েড অ্যাপের ডেটা com_google_test_ANDROID নামক একটি টেবিলে থাকবে।
সারি
একটি টেবিলের প্রতিটি সারি একটি সেশন ইভেন্টকে প্রতিনিধিত্ব করে যা ঘটেছিল।
কলাম
যদি BigQuery তে স্ট্রিমিং এক্সপোর্ট সক্ষম করা থাকে, তাহলে রিয়েলটাইম টেবিলে ব্যাচ টেবিলের মতো একই কলাম থাকবে।
এক্সপোর্ট করা Firebase সেশন ডেটার জন্য টেবিলের মধ্যে কলামগুলি এখানে দেওয়া হল:
| ক্ষেত্রের নাম | ডেটা টাইপ | বিবরণ |
|---|---|---|
instance_id | স্ট্রিং | ডিভাইস থেকে Firebase ইনস্টলেশন আইডি (FID)। একটি অনন্য অ্যাপ + ডিভাইস ইনস্টলেশন শনাক্ত করে |
session_id | স্ট্রিং | এই সেশনের অনন্য আইডি |
first_session_id | স্ট্রিং | অ্যাপটি কোল্ড স্টার্ট হওয়ার পর থেকে এই সেশনের সিরিজের সেশনের প্রথম আইডি। কোল্ড স্টার্টের পর থেকে সংঘটিত সমস্ত সেশনগুলিকে গোষ্ঠীভুক্ত করতে এটি ব্যবহার করা যেতে পারে। যদি এই সেশনটি প্রথম সেশন হয়, তাহলে এই ক্ষেত্রটি session_id মতোই হবে। |
session_index | পূর্ণসংখ্যা | অ্যাপটি কোল্ড স্টার্ট হওয়ার পর এই সেশনটি যে ক্রমানুসারে এসেছে। কোল্ড স্টার্টের পর প্রথম সেশনের জন্য, এটি 0 হবে। কোল্ড স্টার্ট না ঘটলে (উদাহরণস্বরূপ, 30 মিনিট নিষ্ক্রিয়তার পরে) প্রতিবার একটি সেশন তৈরি হলে সূচকটি বৃদ্ধি পাবে। |
event_type | স্ট্রিং | সেশনে ঘটে যাওয়া ইভেন্টের ধরণ (উদাহরণস্বরূপ, SESSION_START ) |
event_timestamp | টাইমস্ট্যাম্প | ঘটনাটি সংঘটিত হওয়ার সময় |
received_timestamp | টাইমস্ট্যাম্প | ডিভাইস থেকে সার্ভার যে সময় ইভেন্টটি গ্রহণ করেছিল |
performance_data_collection_enabled | বুলিয়ান | সেশনের সময় Firebase পারফর্মেন্স মনিটরিং SDK ডেটা সংগ্রহ সক্ষম করা হয়েছিল কিনা |
crashlytics_data_collection_enabled | বুলিয়ান | সেশনের সময় Firebase Crashlytics SDK ডেটা সংগ্রহ সক্ষম করা হয়েছিল কিনা |
application | রেকর্ড | অ্যাপ্লিকেশনটি বর্ণনা করে |
application.build_version | স্ট্রিং | অ্যাপ্লিকেশনটির বিল্ড সংস্করণ (উদাহরণস্বরূপ, 1523456 ) |
application.display_version | স্ট্রিং | অ্যাপ্লিকেশনটির প্রদর্শন সংস্করণ (উদাহরণস্বরূপ, 4.1.7 ) |
device | রেকর্ড | যে ডিভাইসে ঘটনাটি ঘটেছে |
device.model | স্ট্রিং | ডিভাইসটির মডেল |
device.manufacturer | স্ট্রিং | ডিভাইসটির নির্মাতা। অ্যাপল প্ল্যাটফর্ম অ্যাপের জন্য, এটি হবে NULL । |
operating_system | রেকর্ড | ডিভাইসের অপারেটিং সিস্টেম বর্ণনা করে |
operating_system.display_version | স্ট্রিং | অপারেটিং সিস্টেমের ডিসপ্লে ভার্সন (উদাহরণস্বরূপ, 10.2.1 ) |
operating_system.name | স্ট্রিং | অপারেটিং সিস্টেমের নাম |
operating_system.type | স্ট্রিং | অপারেটিং সিস্টেমের ধরণ (উদাহরণস্বরূপ, IOS )। এই ক্ষেত্রটি শুধুমাত্র অ্যাপল ডিভাইসের জন্য সেট করা আছে। |
operating_system.device_type | স্ট্রিং | ডিভাইসের ধরণ (উদাহরণস্বরূপ, MOBILE , TABLET , TV ) |
নতুন রপ্তানি পরিকাঠামোতে আপগ্রেড করুন
২০২৪ সালের অক্টোবরের মাঝামাঝি সময়ে, Crashlytics BigQuery Crashlytics ডেটা ব্যাচ রপ্তানির জন্য একটি নতুন অবকাঠামো চালু করে।
সমস্ত Firebase প্রকল্পগুলি ১৫ সেপ্টেম্বর, ২০২৫ তারিখের মধ্যে স্বয়ংক্রিয়ভাবে নতুন ব্যাচ এক্সপোর্ট অবকাঠামোতে আপগ্রেড করা হবে। আপনি এই তারিখের আগে আপগ্রেড করতে পারেন, তবে নিশ্চিত করুন যে আপনার BigQuery ব্যাচ টেবিলগুলি আপগ্রেড করার পূর্বশর্তগুলি পূরণ করে।
আপনি নতুন অবকাঠামোতে আপগ্রেড করতে পারেন, তবে নিশ্চিত করুন যে আপনার BigQuery ব্যাচ টেবিলগুলি আপগ্রেড করার পূর্বশর্তগুলি পূরণ করে।
আপনি নতুন অবকাঠামোতে আছেন কিনা তা নির্ধারণ করুন
যদি আপনি ২০২৪ সালের অক্টোবরের মাঝামাঝি বা তার পরে ব্যাচ এক্সপোর্ট সক্ষম করে থাকেন, তাহলে আপনার ফায়ারবেস প্রকল্পটি স্বয়ংক্রিয়ভাবে নতুন এক্সপোর্ট অবকাঠামো ব্যবহার করছে।
আপনার প্রকল্পটি কোন অবকাঠামো ব্যবহার করছে তা আপনি পরীক্ষা করতে পারেন: Google Cloud কনসোলে যান এবং যদি আপনার "ডেটা ট্রান্সফার কনফিগারেশন" লেবেলযুক্ত হয় Firebase Crashlytics with Multi-Region Support , তাহলে আপনার প্রকল্পটি নতুন রপ্তানি অবকাঠামো ব্যবহার করছে।
পুরাতন রপ্তানি অবকাঠামো এবং নতুন রপ্তানি অবকাঠামোর মধ্যে গুরুত্বপূর্ণ পার্থক্য
নতুন অবকাঠামোটি মার্কিন যুক্তরাষ্ট্রের বাইরে Crashlytics ডেটাসেট অবস্থানগুলিকে সমর্থন করে।
২০২৪ সালের অক্টোবরের মাঝামাঝি আগে রপ্তানি সক্ষম করা হয়েছে এবং নতুন রপ্তানি পরিকাঠামোতে আপগ্রেড করা হয়েছে — আপনি এখন ঐচ্ছিকভাবে ডেটা রপ্তানির জন্য অবস্থান পরিবর্তন করতে পারেন।
২০২৪ সালের অক্টোবরের মাঝামাঝি বা তার পরে রপ্তানি সক্ষম করা হয়েছে — সেটআপের সময় আপনাকে ডেটা রপ্তানির জন্য একটি অবস্থান নির্বাচন করতে বলা হয়েছিল।
নতুন পরিকাঠামোটি রপ্তানি সক্ষম করার আগে থেকে ডেটা ব্যাকফিল সমর্থন করে না।
পুরনো অবকাঠামো রপ্তানি সক্ষম করার তারিখের 30 দিন আগে পর্যন্ত ব্যাকফিল সমর্থন করত।
নতুন পরিকাঠামোটি গত 30 দিন পর্যন্ত অথবা BigQuery তে রপ্তানি সক্ষম করার সময় সাম্প্রতিকতম তারিখের (যেটি সাম্প্রতিকতম) ব্যাকফিল সমর্থন করে।
নতুন অবকাঠামোটি আপনার Firebase প্রকল্পে আপনার Firebase অ্যাপের জন্য সেট করা শনাক্তকারী ব্যবহার করে BigQuery ব্যাচ টেবিলের নামকরণ করে।
পুরাতন অবকাঠামো আপনার অ্যাপের বাইনারিতে থাকা বান্ডেল আইডি বা প্যাকেজ নামের উপর ভিত্তি করে নাম সহ ব্যাচ টেবিলে ডেটা লিখেছিল।
নতুন পরিকাঠামোটি আপনার Firebase প্রকল্পে নিবন্ধিত Firebase অ্যাপের জন্য সেট করা বান্ডেল আইডি বা প্যাকেজ নামের উপর ভিত্তি করে নাম সহ ব্যাচ টেবিলে ডেটা লেখে।
ধাপ ১ : আপগ্রেড করার পূর্বশর্ত
আপনার বিদ্যমান BigQuery ব্যাচ টেবিলগুলি আপনার Firebase প্রকল্পে নিবন্ধিত Firebase অ্যাপের জন্য সেট করা বান্ডেল আইডি বা প্যাকেজ নামের সাথে মিলে যাওয়া শনাক্তকারী ব্যবহার করে কিনা তা পরীক্ষা করে দেখুন। যদি সেগুলি না মেলে, তাহলে আপনার রপ্তানি করা ব্যাচ ডেটাতে ব্যাঘাত ঘটতে পারে। বেশিরভাগ প্রকল্পই সঠিক এবং সামঞ্জস্যপূর্ণ অবস্থায় থাকবে, তবে আপগ্রেড করার আগে এটি পরীক্ষা করা গুরুত্বপূর্ণ।
আপনার Firebase প্রজেক্টে নিবন্ধিত সমস্ত Firebase অ্যাপ Firebase কনসোলে পাবেন: আপনার Project settings এ যান, তারপর আপনার সমস্ত Firebase অ্যাপ এবং তাদের তথ্য দেখতে Your apps কার্ডে স্ক্রোল করুন।
আপনি Google Cloud console-এর BigQuery পৃষ্ঠায় আপনার সমস্ত BigQuery ব্যাচ টেবিল খুঁজে পেতে পারেন।
উদাহরণস্বরূপ, এখানে আদর্শ রাজ্যগুলি রয়েছে যেখানে আপগ্রেড করার সময় আপনার কোনও সমস্যা হবে না:
আপনার Firebase প্রজেক্টে
com_yourcompany_yourproject_IOSনামে একটি ব্যাচ টেবিল এবংcom.yourcompany.yourprojectবান্ডেল আইডি সহ একটি Firebase iOS+ অ্যাপ নিবন্ধিত আছে।আপনার Firebase প্রজেক্টে
com_yourcompany_yourproject_ANDROIDনামে একটি ব্যাচ টেবিল এবংcom.yourcompany.yourprojectপ্যাকেজ নাম সহ একটি Firebase Android অ্যাপ নিবন্ধিত আছে।
যদি আপনার ব্যাচ টেবিলের নামগুলি আপনার নিবন্ধিত Firebase অ্যাপের জন্য সেট করা শনাক্তকারীর সাথে মেলে না , তাহলে আপনার ব্যাচ এক্সপোর্টে ব্যাঘাত এড়াতে ম্যানুয়ালি আপগ্রেড করার আগে বা 15 সেপ্টেম্বর, 2025 এর আগে এই পৃষ্ঠায় দেওয়া নির্দেশাবলী অনুসরণ করুন ।
ধাপ ২ : নতুন পরিকাঠামোতে ম্যানুয়ালি আপগ্রেড করুন
যদি আপনি ২০২৪ সালের অক্টোবরের মাঝামাঝি আগে ব্যাচ এক্সপোর্ট সক্ষম করে থাকেন, তাহলে আপনি Firebase কনসোলে Crashlytics ডেটা এক্সপোর্ট বন্ধ করে আবার চালু করে ম্যানুয়ালি নতুন অবকাঠামোতে আপগ্রেড করতে পারেন।
এখানে বিস্তারিত পদক্ষেপগুলি দেওয়া হল:
Firebase কনসোলে, ইন্টিগ্রেশন পৃষ্ঠায় যান।
In the BigQuery card, click Manage .
Toggle off the Crashlytics slider to disable export. When prompted, confirm that you want data export to stop.
Immediately toggle on again the Crashlytics slider to re-enable export. When prompted, confirm that you want to export data.
Your Crashlytics data export to BigQuery is now using the new export infrastructure.
Your existing batch table name doesn't match your Firebase App identifier
If you have existing BigQuery batch tables in this state, then it means that they're not compatible with Firebase's new batch export-to- BigQuery infrastructure. Note that all Firebase projects will be automatically migrated to the new export infrastructure as early as September 15, 2025.
Follow the guidance in this section before manually upgrading or before September 15, 2025 to avoid disruption to the batch export of your Crashlytics data to BigQuery .
Jump to instructions for options to avoid disruptions
Understand how the export infrastructure uses identifiers to write data to BigQuery tables
Here's how the two export infrastructures write Crashlytics data to BigQuery batch tables:
Legacy export infrastructure : Writes data to a table with a name that's based on the bundle ID or package name in your app's binary .
New export infrastructure : Writes data to a table with a name that's based on the bundle ID or package name set for your registered Firebase App in your Firebase project .
Unfortunately, sometimes the bundle ID or package name in your app's binary doesn't match the bundle ID or package name set for your registered Firebase App in your Firebase project . This usually happens if someone didn't enter the actual identifier during app registration.
What happens if this isn't fixed before upgrading?
If the identifiers in these two locations don't match, then the following happens after upgrading to the new export infrastructure:
Your Crashlytics data will start writing to a new BigQuery batch table — that is, a new table with a name based on the bundle ID or package name set for your registered Firebase App in your Firebase project .
Any existing "legacy" table with a name based on the identifier in your app's binary will no longer have data written to it.
Example scenarios of mismatched identifiers
Note that BigQuery batch table names are automatically appended with _IOS or _ANDROID to indicate the platform of the app.
| Identifier(s) in your app's binary | Identifier(s) set for your Firebase App(s) | Legacy behavior | Behavior after upgrade to new export infrastructure | সমাধান |
|---|---|---|---|---|
foo | bar | Writes to a single table named after the identifier in app's binary ( foo ) | Creates then writes to a single table named after the identifier set for Firebase App ( bar ) | Implement either Option 1 or 2 described below. |
foo | bar , qux , etc. | Writes to a single table named after the identifier in app's binary ( foo ) | Creates* then writes to multiple tables named after the identifiers set for Firebase Apps ( bar , qux , etc.) | Implement Option 2 described below. |
foo , baz , etc. | bar | Writes to multiple tables named after the multiple identifiers in app's binary ( foo , baz , etc.) | Creates** then writes every app's data to a single table named after the identifier set for Firebase App ( bar ) | None of the options can be implemented. You can still differentiate data from each app within the single table by using the app's |
* If the identifier in your app's binary matched one of the identifiers set for a Firebase App, then the new export infrastructure won't create a new table for that identifier. Instead, it will continue writing data for that specific app to it. All other apps will be written to new tables.
** If one of the identifiers in your app's binary matched the identifier set for the Firebase App, then the new export infrastructure won't create a new table. Instead, it will maintain that table and start writing data for all apps to it.
Options to avoid disruption
To avoid any disruptions, follow the instructions for one of the options described below before you manually upgrade or before September 15, 2025.
OPTION 1 :
Use the new table created by the new export infrastructure. You'll copy data from your existing table to the new table.In the Firebase console, upgrade to the new export infrastructure by turning export off and then on again for the linked app.
This action creates a new batch table with a name that's based on the bundle ID or package name set for your registered Firebase App in your Firebase project .
In the Google Cloud console, copy all the data from your legacy table to the new table that was just created.
If you have any downstream dependencies that depend on your batch table, change them to use the new table.
OPTION 2 :
Continue writing to your existing table. You'll override some defaults in a BigQuery config to achieve this.In the Firebase console, find and take note of the Firebase App ID (for example,
1:1234567890:ios:321abc456def7890) of the app with the mismatched batch table name and identifier:
Go to your Project settings , then scroll to the Your apps card to see all your Firebase Apps and their information.In the Firebase console, upgrade to the new export infrastructure by turning export off and then on again for the linked app.
This action does two things:
Creates a new batch table with a name that's based on the bundle ID or package name set for your registered Firebase App in your Firebase project . (You'll eventually delete this table, but do not delete it yet.)
Creates a BigQuery "data transfer config" with the source
Firebase Crashlytics with Multi-Region Support.
In the Google Cloud console, change the new "data transfer config" so that data will continue to write to your existing table:
Go to BigQuery > Data transfers to view your "data transfer config".
Select the config that has the source
Firebase Crashlytics with Multi-Region Support.Click Edit in the top-right corner.
In the Data source details section, find a list for gmp_app_id and a list for client_namespace .
In BigQuery , the Firebase App ID is called the
gmp_app_id. By default, theclient_namespacevalue in BigQuery is the corresponding unique bundle ID / package name of the app, but you'll be overriding this default configuration.BigQuery uses the
client_namespacevalue for the name of the batch table that each linked Firebase App writes to.Find the gmp_app_id of the Firebase App for which you want to override default settings. Change its client_namespace value to the name of the table you want the Firebase App to write to instead (usually this is the name of the legacy table the app was writing to with the legacy export infrastructure).
Save the config change.
Schedule a backfill for the days that your existing table is missing data.
Once the backfill is done, delete the new table that was automatically created by the new export infrastructure.