PlaySearch.approveApps.
        # Corresponds to the JSON property `permission`
        # @return [Arraychoice or multiselect restrictions, the list
        # of possible entries' human-readable names.
        # Corresponds to the JSON property `entry`
        # @return [Arraychoice or multiselect restrictions, the list
        # of possible entries' machine-readable values. These values should be used
        # in the configuration, either as a single string value for a
        # choice restriction or in a stringArray for a
        # multiselect restriction.
        # Corresponds to the JSON property `entryValue`
        # @return [Arraybundle or bundleArray restrictions, the list
        # of nested restrictions. A bundle restriction is always nested
        # within a bundleArray restriction, and a
        # bundleArray restriction is at most two levels deep.
        # Corresponds to the JSON property `nestedRestriction`
        # @return [ArraytrackId instead.
        # Corresponds to the JSON property `track`
        # @return [String]
        attr_accessor :track
      
        # Track ids that the app version is published in. Replaces the
        # track field (deprecated), but doesn't include the production
        # track (see isProduction instead).
        # Corresponds to the JSON property `trackId`
        # @return [ArrayProducts.approve call.
        # Corresponds to the JSON property `approvalUrl`
        # @return [String]
        attr_accessor :approval_url
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @approval_url = args[:approval_url] if args.key?(:approval_url)
        end
      end
      
      # An AuthenticationToken is used by the EMM's device policy client on a device
      # to provision the given EMM-managed user on that device.
      class AuthenticationToken
        include Google::Apis::Core::Hashable
      
        # The authentication token to be passed to the device policy client on the
        # device where it can be used to provision the account for which this token
        # was generated.
        # Corresponds to the JSON property `token`
        # @return [String]
        attr_accessor :token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @token = args[:token] if args.key?(:token)
        end
      end
      
      # The auto-install constraint. Defines a set of restrictions for installation.
      # At least one of the fields must be set.
      class AutoInstallConstraint
        include Google::Apis::Core::Hashable
      
        # Charging state constraint.
        # Corresponds to the JSON property `chargingStateConstraint`
        # @return [String]
        attr_accessor :charging_state_constraint
      
        # Device idle state constraint.
        # Corresponds to the JSON property `deviceIdleStateConstraint`
        # @return [String]
        attr_accessor :device_idle_state_constraint
      
        # Network type constraint.
        # Corresponds to the JSON property `networkTypeConstraint`
        # @return [String]
        attr_accessor :network_type_constraint
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @charging_state_constraint = args[:charging_state_constraint] if args.key?(:charging_state_constraint)
          @device_idle_state_constraint = args[:device_idle_state_constraint] if args.key?(:device_idle_state_constraint)
          @network_type_constraint = args[:network_type_constraint] if args.key?(:network_type_constraint)
        end
      end
      
      # 
      class AutoInstallPolicy
        include Google::Apis::Core::Hashable
      
        # The constraints for auto-installing the app. You can specify a maximum of
        # one constraint.
        # Corresponds to the JSON property `autoInstallConstraint`
        # @return [Array"123456789abcdef0".
        # Corresponds to the JSON property `androidId`
        # @return [String]
        attr_accessor :android_id
      
        # Identifies the extent to which the device is controlled by a managed
        # Google Play EMM in various deployment configurations. managedDevice", a device that has the EMM's device
        # policy controller (DPC) as the device owner.managedProfile", a device that has a profile managed
        # by the DPC (DPC is profile owner) in addition to a separate, personal
        # profile that is unavailable to the DPC.containerApp", no longer used (deprecated).unmanagedProfile", a device that has been allowed (by the
        # domain's admin, using the Admin Console to enable the privilege) to use
        # managed Google Play, but the profile is itself
        # not owned by a DPC.Enterprises.enroll and Enterprises.setAccount (in
      # conjunction with artifacts obtained from the Admin console and the Google
      # API Console) and submitted to the EMM through a more-or-less manual
      # process.Enterprises.generateSignupUrl and
      # Enterprises.completeSignup in conjunction with the managed
      # Google Play sign-up UI (Google-provided mechanism) to create the binding
      # without manual steps."userPurchase" as the entitlement reason. These
      # entitlements cannot be removed via the API.
      class Entitlement
        include Google::Apis::Core::Hashable
      
        # The ID of the product that the entitlement is for. For example,
        # "app:com.google.android.gm".
        # Corresponds to the JSON property `productId`
        # @return [String]
        attr_accessor :product_id
      
        # The reason for the entitlement. For example, "free"
        # for free apps. This property is temporary: it will be replaced by the acquisition kind field of group licenses.
        # Corresponds to the JSON property `reason`
        # @return [String]
        attr_accessor :reason
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @product_id = args[:product_id] if args.key?(:product_id)
          @reason = args[:reason] if args.key?(:reason)
        end
      end
      
      # 
      class ListEntitlementsResponse
        include Google::Apis::Core::Hashable
      
        # An entitlement of a user to a product (e.g. an app).
        # For example, a free app that they have installed, or a paid app that they
        # have been allocated a license to.
        # Corresponds to the JSON property `entitlement`
        # @return [ArrayGrouplicenses resource
      # includes the total number of licenses purchased (paid apps only) and the
      # total number of licenses currently in use. In other words, the total number
      # of Entitlements that exist for the product.
      # Only one group license object is created per product and group license
      # objects are never deleted. If a product is unapproved, its group license
      # remains. This allows enterprise admins to keep track of any remaining
      # entitlements for the product.
      class GroupLicense
        include Google::Apis::Core::Hashable
      
        # How this group license was acquired. "bulkPurchase"
        # means that this Grouplicenses resource was created because the enterprise
        # purchased licenses for this product; otherwise, the value is
        # "free" (for free products).
        # Corresponds to the JSON property `acquisitionKind`
        # @return [String]
        attr_accessor :acquisition_kind
      
        # Whether the product to which this group license relates is currently
        # approved by the enterprise. Products are approved when a group license is
        # first created, but this approval may be revoked by an enterprise admin via
        # Google Play. Unapproved products will not be visible to end users in
        # collections, and new entitlements to them should not normally be created.
        # Corresponds to the JSON property `approval`
        # @return [String]
        attr_accessor :approval
      
        # The total number of provisioned licenses for this product.
        # Returned by read operations, but ignored in write operations.
        # Corresponds to the JSON property `numProvisioned`
        # @return [Fixnum]
        attr_accessor :num_provisioned
      
        # The number of purchased licenses (possibly in multiple purchases).
        # If this field is omitted, then there is no limit on the number of licenses
        # that can be provisioned (for example, if the acquisition kind is
        # "free").
        # Corresponds to the JSON property `numPurchased`
        # @return [Fixnum]
        attr_accessor :num_purchased
      
        # The permission approval status of the product. This field
        # is only set if the product is approved. Possible states are:currentApproved", the current set
        # of permissions is approved, but additional permissions will require the
        # administrator to reapprove the product (If the product was approved
        # without specifying the approved permissions setting, then this is the
        # default behavior.),needsReapproval", the product has unapproved permissions.
        # No additional product licenses can be assigned until the product is
        # reapproved,allCurrentAndFutureApproved",
        # the current permissions are approved and any future permission updates
        # will be automatically approved without administrator review."app:com.google.android.gm".
        # Corresponds to the JSON property `productId`
        # @return [String]
        attr_accessor :product_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @acquisition_kind = args[:acquisition_kind] if args.key?(:acquisition_kind)
          @approval = args[:approval] if args.key?(:approval)
          @num_provisioned = args[:num_provisioned] if args.key?(:num_provisioned)
          @num_purchased = args[:num_purchased] if args.key?(:num_purchased)
          @permissions = args[:permissions] if args.key?(:permissions)
          @product_id = args[:product_id] if args.key?(:product_id)
        end
      end
      
      # 
      class ListGroupLicenseUsersResponse
        include Google::Apis::Core::Hashable
      
        # A user of an enterprise.
        # Corresponds to the JSON property `user`
        # @return [Array"installPending"
        # means that an install request has recently been made and download to the
        # device is in progress. The state "installed"
        # means that the app has been installed. This field is read-only.
        # Corresponds to the JSON property `installState`
        # @return [String]
        attr_accessor :install_state
      
        # The ID of the product that the install is for. For example,
        # "app:com.google.android.gm".
        # Corresponds to the JSON property `productId`
        # @return [String]
        attr_accessor :product_id
      
        # The version of the installed product. Guaranteed to be set only if the
        # install state is "installed".
        # Corresponds to the JSON property `versionCode`
        # @return [Fixnum]
        attr_accessor :version_code
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @install_state = args[:install_state] if args.key?(:install_state)
          @product_id = args[:product_id] if args.key?(:product_id)
          @version_code = args[:version_code] if args.key?(:version_code)
        end
      end
      
      # An event generated when an app installation failed on a device
      class InstallFailureEvent
        include Google::Apis::Core::Hashable
      
        # The Android ID of the device.
        # This field will always be present.
        # Corresponds to the JSON property `deviceId`
        # @return [String]
        attr_accessor :device_id
      
        # Additional details on the failure if applicable.
        # Corresponds to the JSON property `failureDetails`
        # @return [String]
        attr_accessor :failure_details
      
        # The reason for the installation failure.
        # This field will always be present.
        # Corresponds to the JSON property `failureReason`
        # @return [String]
        attr_accessor :failure_reason
      
        # The id of the product (e.g. "app:com.google.android.gm") for which the
        # install failure event occured. This field will always be present.
        # Corresponds to the JSON property `productId`
        # @return [String]
        attr_accessor :product_id
      
        # The ID of the user.
        # This field will always be present.
        # Corresponds to the JSON property `userId`
        # @return [String]
        attr_accessor :user_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @device_id = args[:device_id] if args.key?(:device_id)
          @failure_details = args[:failure_details] if args.key?(:failure_details)
          @failure_reason = args[:failure_reason] if args.key?(:failure_reason)
          @product_id = args[:product_id] if args.key?(:product_id)
          @user_id = args[:user_id] if args.key?(:user_id)
        end
      end
      
      # 
      class ListInstallsResponse
        include Google::Apis::Core::Hashable
      
        # An installation of an app for a user on a specific device.
        # The existence of an install implies that the user must have an
        # entitlement to the app.
        # Corresponds to the JSON property `install`
        # @return [ArraymanagedDevice", a device where the DPC is set as
        # device owner,managedProfile", a device where the DPC is set as profile
        # owner.productAvailabilityPolicy
        # needs to be set to WHITELIST or ALL for the
        # product policies to be applied.
        # Corresponds to the JSON property `productPolicy`
        # @return [ArrayappTracks instead.
        # Corresponds to the JSON property `availableTracks`
        # @return [ArraypublicGoogleHosted means that the package is
        # available through the Play store and not restricted to a specific
        # enterprise. The value privateGoogleHosted means that the
        # package is a private app (restricted to an enterprise) but hosted by
        # Google. The value privateSelfHosted means that the package is
        # a private app (restricted to an enterprise) and is privately hosted.
        # Corresponds to the JSON property `distributionChannel`
        # @return [String]
        attr_accessor :distribution_channel
      
        # Noteworthy features (if any) of this product.
        # Corresponds to the JSON property `features`
        # @return [Arrayapp:<package name>. For
        # example, app:com.google.android.gm represents the Gmail app.
        # Corresponds to the JSON property `productId`
        # @return [String]
        attr_accessor :product_id
      
        # Whether this product is free, free with in-app purchases, or paid.
        # If the pricing is unknown, this means the product is not generally
        # available anymore (even though it might still be available to
        # people who own it).
        # Corresponds to the JSON property `productPricing`
        # @return [String]
        attr_accessor :product_pricing
      
        # A description of the recent changes made to the app.
        # Corresponds to the JSON property `recentChanges`
        # @return [String]
        attr_accessor :recent_changes
      
        # Deprecated.
        # Corresponds to the JSON property `requiresContainerApp`
        # @return [Boolean]
        attr_accessor :requires_container_app
        alias_method :requires_container_app?, :requires_container_app
      
        # A list of screenshot links representing the app.
        # Corresponds to the JSON property `screenshotUrls`
        # @return [Array"app:com.google.android.gm".
        # Corresponds to the JSON property `productId`
        # @return [String]
        attr_accessor :product_id
      
        # Grants the device visibility to the specified product release track(s),
        # identified by trackIds. The list of release tracks of a
        # product can be obtained by calling Products.Get.
        # Corresponds to the JSON property `trackIds`
        # @return [ArraytrackIds instead.
        # Corresponds to the JSON property `tracks`
        # @return [ArraytrackIds.
        # Corresponds to the JSON property `trackIds`
        # @return [ArraytrackIds instead.
        # Corresponds to the JSON property `tracks`
        # @return [ArrayProducts.approve call.
        # If the product is currently unapproved and has no permissions, this
        # URL will point to an empty page.
        # If the product is currently approved, a URL will only be generated if
        # that product has added permissions since it was last approved, and the
        # URL will only display those new permissions that have not yet been
        # accepted.
        # Corresponds to the JSON property `url`
        # @return [String]
        attr_accessor :url
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @url = args[:url] if args.key?(:url)
        end
      end
      
      # 
      class ProductsListResponse
        include Google::Apis::Core::Hashable
      
        # Information about the current page.
        # List operations that supports paging return only one "page" of results. This
        # protocol buffer message describes the page that has been returned.
        # Corresponds to the JSON property `pageInfo`
        # @return [Google::Apis::AndroidenterpriseV1::PageInfo]
        attr_accessor :page_info
      
        # Information about a product (e.g. an app) in the Google Play store, for
        # display to an enterprise admin.
        # Corresponds to the JSON property `product`
        # @return [ArraygoogleCredentials key type, this is identical to the
        # cert that can be retrieved by using the X.509 cert url inside of the
        # credentials file.
        # Corresponds to the JSON property `publicData`
        # @return [String]
        attr_accessor :public_data
      
        # The file format of the generated key data.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @data = args[:data] if args.key?(:data)
          @id = args[:id] if args.key?(:id)
          @public_data = args[:public_data] if args.key?(:public_data)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # 
      class ServiceAccountKeysListResponse
        include Google::Apis::Core::Hashable
      
        # The service account credentials.
        # Corresponds to the JSON property `serviceAccountKey`
        # @return [ArrayprimaryEmail).userAccount
        # can be installed on multiple devices, but a deviceAccount is
        # specific to a single device. An EMM-managed user (emmManaged)
        # can be either type (userAccount, deviceAccount),
        # but a Google-managed user (googleManaged) is always a
        # userAccount.
        # Corresponds to the JSON property `accountType`
        # @return [String]
        attr_accessor :account_type
      
        # The name that will appear in user interfaces. Setting this property is
        # optional when creating EMM-managed users. If you do set this property,
        # use something generic about the organization (such as "Example, Inc.") or
        # your name (as EMM).
        # Not used for Google-managed user accounts.
        # @mutable androidenterprise.users.update
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # The unique ID for the user.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # The entity that manages the user.  With googleManaged users,
        # the source of truth is Google so EMMs have to make sure a Google Account
        # exists for the user.  With emmManaged users, the
        # EMM is in charge.
        # Corresponds to the JSON property `managementType`
        # @return [String]
        attr_accessor :management_type
      
        # The user's primary email address, for example, "jsmith@example.com".
        # Will always be set for Google managed users and not set for EMM managed
        # users.
        # Corresponds to the JSON property `primaryEmail`
        # @return [String]
        attr_accessor :primary_email
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @account_identifier = args[:account_identifier] if args.key?(:account_identifier)
          @account_type = args[:account_type] if args.key?(:account_type)
          @display_name = args[:display_name] if args.key?(:display_name)
          @id = args[:id] if args.key?(:id)
          @management_type = args[:management_type] if args.key?(:management_type)
          @primary_email = args[:primary_email] if args.key?(:primary_email)
        end
      end
      
      # 
      class ListUsersResponse
        include Google::Apis::Core::Hashable
      
        # A user of an enterprise.
        # Corresponds to the JSON property `user`
        # @return [ArrayminimalUi", the device's status bar, navigation bar,
        # the app's URL, and a refresh button are visible when the app is open. For
        # HTTP URLs, you can only select this option.
        # standalone", the device's status bar and navigation
        # bar are visible when the app is open.
        # fullScreen", the app opens in full screen mode, hiding
        # the device's status and navigation bars.  All browser UI elements, page
        # URL, system status bar and back button are not visible, and the web app
        # takes up the entirety of the available display area.
        # Note that the version can automatically increase during the lifetime of
        # the web app, while Google does internal housekeeping to keep the web app
        # up-to-date.
        # Corresponds to the JSON property `versionCode`
        # @return [Fixnum]
        attr_accessor :version_code
      
        # The ID of the application.  A string of the form
        # "app:<package name>" where the package name
        # always starts with the prefix
        # "com.google.enterprise.webapp." followed by a
        # random id.
        # Corresponds to the JSON property `webAppId`
        # @return [String]
        attr_accessor :web_app_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_mode = args[:display_mode] if args.key?(:display_mode)
          @icons = args[:icons] if args.key?(:icons)
          @is_published = args[:is_published] if args.key?(:is_published)
          @start_url = args[:start_url] if args.key?(:start_url)
          @title = args[:title] if args.key?(:title)
          @version_code = args[:version_code] if args.key?(:version_code)
          @web_app_id = args[:web_app_id] if args.key?(:web_app_id)
        end
      end
      
      # Icon for a web app.
      class WebAppIcon
        include Google::Apis::Core::Hashable
      
        # The actual bytes of the image in a base64url encoded string (c.f. RFC4648,
        # section 5 "Base 64 Encoding with URL and Filename Safe Alphabet").
        #