Kiểm tra để đảm bảo bạn đang sử dụng api_secret cho đúng luồng. Nếu bạn thiết lập giao thức đo lường cho nhiều luồng, thì mỗi luồng sẽ có một khoá riêng.
Để giúp chống thư rác, bạn có thể thu hồi api_secret. Đảm bảo rằng api_secret bạn đang sử dụng vẫn hợp lệ. Có thể một người dùng khác có quyền truy cập vào luồng của bạn đã thu hồi quyền truy cập vào luồng đó do nhầm lẫn.
api_secret có phân biệt chữ hoa chữ thường. Kiểm tra kỹ để đảm bảo rằng api_secret trong giao diện người dùng Google Analytics chính xác giống với api_secret mà bạn đang sử dụng trong mã.
Không sử dụng advertising_id.
advertising_id không được hỗ trợ làm giá trị nhận dạng thiết bị hợp lệ. Sử dụng app_instance_id nếu bạn đang sử dụng Firebase và client_id nếu bạn đang sử dụng gtag.js.
Giấy tờ tuỳ thân không hợp lệ
Vì Giao thức đo lường hỗ trợ các mã nhận dạng từ SDK Google Analytics cho Firebase và gtag.js, hãy đảm bảo bạn sử dụng đúng mã nhận dạng. Mã nhận dạng mà bạn nên sử dụng sẽ thay đổi tuỳ thuộc vào việc bạn đang sử dụng SDK Google Analytics cho Firebase hay gtag.js. Sau đây là những mã nhận dạng mà bạn nên sử dụng:
SDK Google Analytics cho Firebase
Nếu đang sử dụng SDK Google Analytics cho Firebase, bạn nên sử dụng các mã nhận dạng sau:
firebase_app_id – Thêm mã nhận dạng này vào tham số truy vấn cho yêu cầu. Mã nhận dạng này xác định duy nhất Ứng dụng Firebase của bạn. Tất cả người dùng ứng dụng sẽ có cùng một firebase_app_id. Tìm thấy trong bảng điều khiển Firebase
trong phần: Cài đặt dự án > Chung > Ứng dụng của bạn > Mã ứng dụng
app_instance_id – Thêm mã nhận dạng này vào nội dung yêu cầu POST. Mã nhận dạng này xác định riêng một lượt cài đặt nhất định của Ứng dụng Firebase. Giá trị này sẽ khác nhau đối với mỗi lượt cài đặt ứng dụng. Sau đây là các phương thức để yêu cầu giá trị này cho từng nền tảng Firebase:
firebase_instance_id – Bạn không được đưa mã nhận dạng này vào yêu cầu.
Mã này được dùng để xác định một thực thể nhất định của ứng dụng, nhưng chỉ dành riêng cho Firebase. Phương thức này được dùng cho các tác vụ như thông báo FCM.
gtag.js
Nếu đang sử dụng gtag.js, bạn nên sử dụng các mã nhận dạng sau:
measurement_id – Thêm mã nhận dạng này vào tham số truy vấn cho yêu cầu. Mã này xác định duy nhất một Luồng dữ liệu. Tất cả người dùng trang web của bạn sẽ có cùng một measurement_id. Có trong giao diện người dùng Google Analytics ở mục: Quản trị > Luồng dữ liệu > chọn luồng của bạn > Mã đo lường
client_id – Thêm mã nhận dạng này vào nội dung yêu cầu POST. Mã nhận dạng này xác định duy nhất một thực thể người dùng nhất định của ứng dụng web. Giá trị này sẽ khác nhau đối với mỗi người dùng ứng dụng. Hãy xem các ví dụ này để biết cách truy xuất giá trị này.
[null,null,["Cập nhật lần gần đây nhất: 2025-07-26 UTC."],[[["\u003cp\u003eThis guide helps troubleshoot common Google Analytics 4 Measurement Protocol implementation errors, focusing on missing events and invalid user/device IDs.\u003c/p\u003e\n"],["\u003cp\u003eIf events aren't appearing, ensure your \u003ccode\u003eapi_secret\u003c/code\u003e is correct, valid, accurately copied, and you're using the appropriate device identifier (\u003ccode\u003eapp_instance_id\u003c/code\u003e or \u003ccode\u003eclient_id\u003c/code\u003e, not \u003ccode\u003eadvertising_id\u003c/code\u003e).\u003c/p\u003e\n"],["\u003cp\u003eWhen using the Measurement Protocol, select the correct IDs based on whether you're implementing via Firebase or gtag.js, as outlined in the guide.\u003c/p\u003e\n"],["\u003cp\u003eFor Firebase, utilize \u003ccode\u003efirebase_app_id\u003c/code\u003e and \u003ccode\u003eapp_instance_id\u003c/code\u003e, avoiding \u003ccode\u003efirebase_instance_id\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eFor gtag.js, use \u003ccode\u003emeasurement_id\u003c/code\u003e and \u003ccode\u003eclient_id\u003c/code\u003e for proper event tracking.\u003c/p\u003e\n"]]],["To resolve event visibility issues in Google Analytics, verify the correct `api_secret` is used, valid, and copied accurately, and avoid using `advertising_id`. For Firebase, use `firebase_app_id` in query parameters and `app_instance_id` in the POST body; retrieve `app_instance_id` using the appropriate platform's method. For gtag.js, utilize `measurement_id` in query parameters and `client_id` in the POST body. Both `client_id` and `app_instance_id` should differ for each user.\n"],null,["# Troubleshooting\n\nThis guide outlines common troubleshooting steps to fix common implementation\nerrors.\n\nNo events\n---------\n\nIf your events aren't showing up in Google Analytics, there are a few common\nissues you should look for.\n\nFirst choose your client: \nFirebase gtag.js\n\n\u003cbr /\u003e\n\n- Are you using the correct [api_secret](/analytics/devguides/collection/protocol/ga4/reference#api_secret)?\n\n Check that you're using the `api_secret` for the right stream. If you set up\n the measurement protocol for multiple streams, each stream will have its own\n secret.\n- Is your [api_secret](/analytics/devguides/collection/protocol/ga4/reference#api_secret) still valid?\n\n In order to help combat spam, you're able to revoke `api_secret`s. Make sure\n that the `api_secret` you are using is still valid. It's possible that\n another user with access to your stream may have revoked access to it by\n mistake.\n- Is your [api_secret](/analytics/devguides/collection/protocol/ga4/reference#api_secret) copied correctly?\n\n `api_secret` is case-sensitive. Double check that the `api_secret` in the\n Google Analytics UI is *exactly* the same as the one you're using in your\n code.\n- Don't use `advertising_id`.\n\n `advertising_id` is not supported as a valid device identifier. Use\n `app_instance_id` if you're using Firebase and `client_id` if you're using\n gtag.js.\n\nInvalid IDs\n-----------\n\nSince the Measurement Procotol supports IDs from the Google Analytics for\nFirebase SDK and gtag.js, make sure you use the right ID. **The IDs you should\nuse changes depending on whether you are using the Google Analytics for Firebase\nSDK or gtag.js.** The following outlines which IDs you should be using:\n\n**Google Analytics for Firebase SDK**\n\nIf you're using the Google Analytics for Firebase SDK the IDs you *should* use\nare:\n\n- [`firebase_app_id`](/analytics/devguides/collection/protocol/ga4/reference?client_type=firebase#firebase_app_id) - Include this ID in the query parameters for the request. This ID uniquely identifies your Firebase App. All users of your app will have the same `firebase_app_id`. Found in the Firebase console under: \n **Project Settings** \\\u003e **General** \\\u003e **Your Apps** \\\u003e **App ID**\n- [`app_instance_id`](/analytics/devguides/collection/protocol/ga4/reference?client_type=firebase#app_instance_id) - Include this ID in the POST body for the request. This\n ID uniquely identifies a given installation of a Firebase App. This value\n will be different for every installation of your app. The methods to request\n this value for each Firebase platform are as follows:\n\n - [Android - getAppInstanceId()](https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/FirebaseAnalytics#public-taskstring-getappinstanceid)\n - [Kotlin - getAppInstanceId()](https://firebase.google.com/docs/reference/kotlin/com/google/firebase/analytics/FirebaseAnalytics#getappinstanceid)\n - [Swift - appInstanceID()](https://firebase.google.com/docs/reference/swift/firebaseanalytics/api/reference/Classes/Analytics#appinstanceid)\n - [Objective-C - appInstanceID](https://firebase.google.com/docs/reference/ios/firebaseanalytics/api/reference/Classes/FIRAnalytics#+appinstanceid)\n - [C++ - GetAnalyticsInstanceId()](https://firebase.google.com/docs/reference/cpp/namespace/firebase/analytics#getanalyticsinstanceid)\n - [Unity - GetAnalyticsInstanceIdAsync()](https://firebase.google.com/docs/reference/unity/class/firebase/analytics/firebase-analytics#getanalyticsinstanceidasync)\n\nYou should *not* use the following:\n\n- `firebase_instance_id` - This ID *should not* be included in your request. This ID is used for identifiying a given instance of the app, but is Firebase specific. It's used for tasks such as FCM messages.\n\n**gtag.js**\n\nIf you're using gtag.js, the IDs you *should* use are:\n\n- [`measurement_id`](/analytics/devguides/collection/protocol/ga4/reference?client_type=gtag#measurement_id) - Include this ID in the query parameters for the request. This ID uniquely identifies a Data Stream. All users of your website will have the same `measurement_id`. Found in the Google Analytics UI under: \n **Admin** \\\u003e **Data Streams** \\\u003e **choose your stream** \\\u003e **Measurement ID**\n- [`client_id`](/analytics/devguides/collection/protocol/ga4/reference?client_type=gtag#client_id) - Include this ID in the POST body for the request. This ID uniquely identifies a given user instance of a web client. This value will be different for every user of your app. See [these examples](/gtagjs/reference/api#get) for how to retrieve this value.\n\nServer-side tagging events missing\n----------------------------------\n\nA [Server-side Tag Manager installation with a Measurement Protocol\nclient](/tag-platform/tag-manager/server-side/send-data#server-to-server_apps) lets you send events in the Measurement Protocol *format* to a\ncontainer. The container then sends those events to Google Analytics using the\nsame mechanism as all other SGTM events.\n| **Note:** It *doesn't* send those events to the Measurement Protocol endpoint, and therefore doesn't support all the features of the Measurement Protocol endpoint, such as deriving [geographic and device information](/analytics/devguides/collection/protocol/ga4#geo_device) from tagging events.\n\nIf you want all the features of the Measurement Protocol, send events directly to the\nMeasurement Protocol instead of your container."]]