AttributionSource 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
此類別代表應歸屬存取權限保護資料的來源。
[Android.Runtime.Register("android/content/AttributionSource", ApiSince=31, DoNotGenerateAcw=true)]
public sealed class AttributionSource : Java.Lang.Object, Android.OS.IParcelable, IDisposable
[<Android.Runtime.Register("android/content/AttributionSource", ApiSince=31, DoNotGenerateAcw=true)>]
type AttributionSource = class
inherit Object
interface IParcelable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 繼承
- 屬性
- 實作
備註
此類別代表應歸屬存取權限保護資料的來源。 歸因來源可以串連起來,表示受保護資料會經過多個應用程式的情況。 例如,應用程式 A 可能會要求應用程式 B 提供聯絡人,而應用程式 B 又可能向應用程式 C 詢問聯絡人。 此時歸因鏈為 A -> B -> C,資料流為 C -> B -> A。使用歸因來源機制有兩個主要好處:如果你代表呼叫應用程式存取私人資料並回傳,避免對呼叫應用程式進行明確的權限檢查;避免雙重資料存取責怪,這通常是在你檢查呼叫應用程式的權限時,以及存取這些權限背後的資料時發生的(針對執行時權限)。 而且如果沒有明確怪罪來電者,資料存取會算進你的應用程式,而不是上一個應用程式,因為你的資料只是代理。
每個都有 Context 歸屬來源,你可以透過 Context#getAttributionSource() 自我表示來獲得,這是一條一連串的。 你可以將工作歸因於另一個應用程式,或更精確地說,將資料流經一連串應用程式,透過 Context#createContext( ContextParams) 指定下一個應用程式的歸因來源,以接收你所存取 AttributionSource.Builder#setNext( AttributionSource)的受保護資料。 建立這條歸因鏈確保資料來源會在釋出資料前檢查歸因鏈中的每個應用程式是否都有存取權限。 如果資料受到敏感權限(例如危險權限),資料來源也會適當記錄該資料是否被序列中的應用程式存取。 同樣地,如果你是代表另一個應用程式存取資料,例如語音辨識器使用麥克風來識別來電應用程式,這很有用。
你可以建立一個歸因鏈,連結你和其他任何應用程式,無需驗證,因為這已經 android.app.AppOpsManager 透過 API 提供。 這支援處理無法取得呼叫者歸因來源且可直接使用 AttributionSource.Builder API 的情況。 然而,如果資料流經超過兩個應用程式(比你為呼叫者存取的資料還多),你需要有一個指向 AttributionSource 呼叫應用程式上下文的句柄,才能建立歸因上下文。 這表示你要麼需要讓對方應用程式有 API 來傳送其歸因來源,要麼使用平台 API 來傳送呼叫者的歸因來源。
你無法在沒有所有應用程式參與歸因鏈的情況下(上述特殊情況除外)偽造歸因鏈。 要建立一個可信的歸因來源,你需要建立一個歸因上下文,指向由它所引用的應用程式明確建立的歸因來源,且遞迴式。
由於建立歸因上下文會檢查歸因鏈中所有應用程式的權限,因此在存取權限保護的 API 時,你必須預期會遇到安全例外,因為鏈中某些應用程式可能沒有權限。
Java 文件 android.content.AttributionSource。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
屬性
| 名稱 | Description |
|---|---|
| AttributionTag |
存取權限保護資料的應用程式歸因標籤。 |
| Class |
回傳此 |
| Creator |
取得可分割的創作者作為出處來源。 |
| DeviceId |
取得這個歸因來源的裝置 ID。 |
| Handle |
底層 Android 實例的帳號。 (繼承來源 Object) |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
此類別代表應歸屬存取權限保護資料的來源。 (繼承來源 JavaObject) |
| JniPeerMembers |
取得用於調用此 Java 節點成員的 JNI 元資料。 |
| Next |
下一個應用程式會接收受權限保護的資料。 |
| PackageName |
存取權限保護資料的套件。 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| Pid |
存取權限保護資料的 PID。 |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 (繼承來源 Object) |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 (繼承來源 Object) |
| Uid |
存取權限保護資料的 UID。 |
方法
| 名稱 | Description |
|---|---|
| CheckCallingUid() |
如果你處理的是 IPC,且不信任呼叫者,你需要驗證來源是否屬於呼叫應用程式,以防止呼叫者將來自其他應用程式的來源傳給你,卻不包含自己在歸因鏈中。 |
| Clone() |
建立並回傳此物件的副本。 (繼承來源 Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
此類別代表應歸屬存取權限保護資料的來源。 (繼承來源 JavaObject) |
| DescribeContents() |
描述此 Parcelable 實例的分組表示中包含的特殊物件種類。 例如,若物件在 writeToParcel(Parcel,int) 的輸出中包含檔案描述符,則此方法的回傳值必須包含 CONTENTS_FILE_DESCRIPTOR 位元。 |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
此類別代表應歸屬存取權限保護資料的來源。 (繼承來源 JavaObject) |
| EnforceCallingUid() |
如果你處理的是 IPC,且不信任呼叫者,你需要驗證來源是否屬於呼叫應用程式,以防止呼叫者將來自其他應用程式的來源傳給你,卻不包含自己在歸因鏈中。 |
| Equals(Object) |
此類別代表應歸屬存取權限保護資料的來源。 (繼承來源 JavaObject) |
| Equals(Object) |
表示是否有其他物體「等同」於此物。 (繼承來源 Object) |
| GetHashCode() |
回傳物件的雜湊碼值。 (繼承來源 Object) |
| IsTrusted(Context) |
檢查此歸因來源是否可信。 |
| JavaFinalize() |
已淘汰.
當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。 (繼承來源 Object) |
| MyAttributionSource() |
回傳一個代表整個呼叫過程的通用碼 |
| Notify() |
喚醒一個正在該物件監視器上等待的執行緒。 (繼承來源 Object) |
| NotifyAll() |
喚醒所有等待該物件監視器的執行緒。 (繼承來源 Object) |
| SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
此類別代表應歸屬存取權限保護資料的來源。 (繼承來源 JavaObject) |
| ToArray<T>() |
從這個 Java 陣列包裝器建立一個受管理陣列。 (繼承來源 Object) |
| ToString() |
回傳物件的字串表示。 (繼承來源 Object) |
| UnregisterFromRuntime() |
將此 Java 節點從互通執行時中取消註冊。 (繼承來源 Object) |
| Wait() |
導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。 (繼承來源 Object) |
| Wait(Int64, Int32) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Wait(Int64) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| WriteToParcel(Parcel, ParcelableWriteFlags) |
把這個物體壓扁成一個包裹。 |
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
此類別代表應歸屬存取權限保護資料的來源。 (繼承來源 JavaObject) |
| IJavaPeerable.Finalized() |
此類別代表應歸屬存取權限保護資料的來源。 (繼承來源 JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
此類別代表應歸屬存取權限保護資料的來源。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
此類別代表應歸屬存取權限保護資料的來源。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
此類別代表應歸屬存取權限保護資料的來源。 (繼承來源 JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
此類別代表應歸屬存取權限保護資料的來源。 (繼承來源 JavaObject) |
| IJavaPeerable.UnregisterFromRuntime() |
此類別代表應歸屬存取權限保護資料的來源。 |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
此類別代表應歸屬存取權限保護資料的來源。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |