# Apple 家庭共享

> 了解如何检查商品是否符合 Apple 家庭共享的条件，以及如何注册一个处理程序，该处理程序会在取消授权时触发，例如家庭成员稍后失去对该共享购买的访问权。

Apple 支持可自动续订的订阅以及非消耗品应用内购的家庭共享。要使用家庭共享，请在 App Store Connect 中为每个商品单独启用它。有关设置说明，请参阅[打开应用内购](https://developer.apple.com/help/app-store-connect/configure-in-app-purchase-settings/turn-on-family-sharing-for-in-app-purchases)的家庭共享。

## 家庭共享资格##family-sharing-eligibility

使用 Apple 商品元数据中的 [`isFamilyShareable`](https://developer.apple.com/documentation/storekit/product/isfamilyshareable) 字段可检查商品是否可以共享。调用 `Product.ProductMetadata.GetAppleProductMetadata()` 可访问此元数据。

```cs
        bool IsProductFamilyShareable(Product product)
        {
            var appleProductMetadata = product.metadata.GetAppleProductMetadata();
            return appleProductMetadata?.isFamilyShareable ?? false;
        }
```

## 撤销的权利##revoked-entitlements

您的应用需要处理家庭成员无法访问共享购买的情况。为此，请使用 `StoreController.AppleStoreExtendedPurchaseService` 为 [IAppleStoreExtendedPurchaseService.OnEntitlementRevoked](https://docs.unity3d.com/Packages/com.unity.purchasing@5.0/api/UnityEngine.Purchasing.IAppleStoreExtendedPurchaseService.html#UnityEngine_Purchasing_IAppleStoreExtendedPurchaseService_OnEntitlementRevoked) 添加监听器。

Apple 撤销对产品的访问权限时会引发此事件。它将撤销的商品 ID 传递给监听器，以便您的应用可以相应更新访问权限。失去共享购买的权限只是可能触发此事件的一种可能情况。

使用以下示例可注册一个监听器以接收授权撤销事件，从而在 Apple 撤销购买访问权限时接收商品 ID。

```cs
void AddAppleListeners()
{
    var applePurchaseService = UnityIAPServices.StoreController().AppleStoreExtendedPurchaseService;
    if (applePurchaseService != null) {
        applePurchaseService.OnEntitlementRevoked += EntitlementRevokedListener;
    }
}

void EntitlementRevokedListener(string productId)
{
    Debug.Log($"Revoked product: {productId}");
}
```
