Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Đối với các trường hợp sử dụng như phân tích hoặc phòng chống gian lận trên một thiết bị cụ thể, bạn có thể cần liên kết việc sử dụng hoặc các hành động trên một nhóm ứng dụng do tổ chức của bạn sở hữu. Dịch vụ Google Play cung cấp một tuỳ chọn tôn trọng quyền riêng tư có tên là mã nhóm ứng dụng.
Phạm vi mã nhóm ứng dụng
Mã nhóm ứng dụng có thể có một trong các phạm vi được xác định sau. Để xác định phạm vi liên kết với một mã nhận dạng cụ thể, hãy gọi getScope().
Phạm vi nhà phát triển trên Google Play
Đối với các ứng dụng do Cửa hàng Google Play cài đặt, API mã nhận dạng nhóm ứng dụng sẽ trả về một mã nhận dạng trong phạm vi nhóm ứng dụng được phát hành trong cùng một tài khoản nhà phát triển Google Play.
Ví dụ: giả sử bạn phát hành hai ứng dụng trong tài khoản nhà phát triển Google Play và cả hai ứng dụng đều được cài đặt trên cùng một thiết bị thông qua Cửa hàng Google Play. Các ứng dụng này có cùng một mã nhóm ứng dụng trên thiết bị đó. Mã nhận dạng này giống nhau ngay cả khi các ứng dụng được ký bằng các khoá khác nhau.
Phạm vi ứng dụng
Trong bất kỳ điều kiện nào sau đây, SDK mã nhóm ứng dụng sẽ trả về một mã nhận dạng duy nhất cho chính ứng dụng gọi trên một thiết bị nhất định:
Ứng dụng được cài đặt bằng một trình cài đặt không phải Cửa hàng Google Play.
Dịch vụ Google Play không thể xác định tài khoản nhà phát triển của ứng dụng trên Google Play.
Ứng dụng được cài đặt trên một thiết bị không có Dịch vụ Google Play.
Không dựa vào giá trị được lưu vào bộ nhớ đệm của mã nhóm ứng dụng
Trong bất kỳ điều kiện nào sau đây, bạn có thể đặt lại mã nhận dạng nhóm ứng dụng cho một nhóm ứng dụng cụ thể được cài đặt qua Cửa hàng Google Play trên thiết bị:
Các nhóm ứng dụng có cùng giá trị mã nhận dạng đã không truy cập vào API mã nhóm ứng dụng trong hơn 13 tháng.
Ứng dụng cuối cùng trong một nhóm ứng dụng nhất định bị gỡ cài đặt khỏi thiết bị.
Người dùng đặt lại thiết bị về trạng thái ban đầu.
Ứng dụng của bạn nên sử dụng SDK để truy xuất giá trị mã nhận dạng mỗi khi cần.
Thêm SDK mã nhóm ứng dụng vào ứng dụng
Đoạn mã sau đây cho thấy một tệp build.gradle mẫu sử dụng thư viện mã nhận dạng nhóm ứng dụng:
Đoạn mã mẫu sau đây minh hoạ cách bạn có thể truy xuất mã nhóm ứng dụng một cách không đồng bộ bằng cách sử dụng API Tasks trong các dịch vụ của Google Play:
Kotlin
valclient=AppSet.getClient(applicationContext)asAppSetIdClientvaltask:Task<AppSetIdInfo>=client.appSetIdInfoasTask<AppSetIdInfo>task.addOnSuccessListener({// Determine current scope of app set ID.valscope:Int=it.scope// Read app set ID value, which uses version 4 of the// universally unique identifier (UUID) format.valid:String=it.id})
Java
Contextcontext=getApplicationContext();AppSetIdClientclient=AppSet.getClient(context);Task<AppSetIdInfo>task=client.getAppSetIdInfo();task.addOnSuccessListener(newOnSuccessListener<AppSetIdInfo>(){@OverridepublicvoidonSuccess(AppSetIdInfoinfo){// Determine current scope of app set ID.intscope=info.getScope();// Read app set ID value, which uses version 4 of the// universally unique identifier (UUID) format.Stringid=info.getId();}});
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-08-17 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-08-17 UTC."],[],[],null,["# Identify developer-owned apps\n\nFor use cases such as analytics or fraud prevention on a given device, you may\nneed to correlate usage or actions across a set of apps owned by your\norganization. [Google Play services](https://developers.google.com/android)\noffers a privacy-friendly option called [*app set ID*](https://developers.google.com/android/reference/com/google/android/gms/appset/AppSetIdInfo).\n\nApp set ID scope\n----------------\n\nThe app set ID can have one of the following defined scopes. To determine which\nscope a particular ID is associated with, call\n[`getScope()`](https://developers.google.com/android/reference/com/google/android/gms/appset/AppSetIdInfo#getScope()).\n| **Caution:** When Google Play services updates from a version that only supports app scope to a version that supports developer scope, the app set ID's value is reset automatically, without any developer action. See [other reasons developers\n| shouldn't rely on a cached value of the app set ID](#dont-rely-on-cached-value).\n\n### Google Play developer scope\n\n| **Note:** The app set SDK attempts to return app set IDs that have the developer scope without any additional developer action, unless the app satisfies the conditions for app scope, described below.\n\nFor apps that are installed by the Google Play store, the app set ID API returns\nan ID scoped to the set of apps published under the same Google Play developer\naccount.\n\nFor example, suppose you publish two apps under your Google Play developer\naccount and both apps are installed on the same device through the Google Play\nstore. The apps share the same app set ID on that device. The ID is the same\neven if the apps are signed by different keys.\n\n### App scope\n\nUnder any of the following conditions, the app set ID SDK returns an ID unique\nto the calling app itself on a given device:\n\n- The app is installed by an installer other than the Google Play store.\n- Google Play services is unable to determine an app's Google Play developer account.\n- The app is installed on a device without Google Play services.\n\nDon't rely on a cached value of app set ID\n------------------------------------------\n\nUnder any of the following conditions, the app set ID for a given set of Google\nPlay store-installed apps on a device can be reset:\n\n- The app set ID API hasn't been accessed by the groups of apps that share the same ID value for over 13 months.\n- The last app from a given set of apps is uninstalled from the device.\n- The user performs a factory reset of the device.\n\nYour app should use the SDK to retrieve the ID value every time it's needed.\n\nAdd the app set ID SDK to your app\n----------------------------------\n\nThe following snippet shows an example `build.gradle` file that uses the app set\nID library: \n\n dependencies {\n implementation 'com.google.android.gms:play-services-appset:16.1.0'\n }\n\nThe following sample snippet demonstrates how you can retrieve the app set ID\nasynchronously using the [Tasks\nAPI](https://developers.google.com/android/guides/tasks) in Google Play\nservices: \n\n### Kotlin\n\n```kotlin\nval client = AppSet.getClient(applicationContext) as AppSetIdClient\nval task: Task\u003cAppSetIdInfo\u003e = client.appSetIdInfo as Task\u003cAppSetIdInfo\u003e\n\ntask.addOnSuccessListener({\n // Determine current scope of app set ID.\n val scope: Int = it.scope\n\n // Read app set ID value, which uses version 4 of the\n // https://en.wikipedia.org/wiki/Universally_unique_identifier.\n val id: String = it.id\n})\n```\n\n### Java\n\n```java\nContext context = getApplicationContext();\nAppSetIdClient client = AppSet.getClient(context);\nTask\u003cAppSetIdInfo\u003e task = client.getAppSetIdInfo();\n\ntask.addOnSuccessListener(new OnSuccessListener\u003cAppSetIdInfo\u003e() {\n @Override\n public void onSuccess(AppSetIdInfo info) {\n // Determine current scope of app set ID.\n int scope = info.getScope();\n\n // Read app set ID value, which uses version 4 of the\n // https://en.wikipedia.org/wiki/Universally_unique_identifier.\n String id = info.getId();\n }\n});\n```"]]