Warning Assignment Of Read-Only Location History

ReadOnly (Visual Basic)

Specifies that a variable or property can be read but not written.

Rules

  • Declaration Context. You can use only at module level. This means the declaration context for a element must be a class, structure, or module, and cannot be a source file, namespace, or procedure.

  • Combined Modifiers. You cannot specify together with in the same declaration.

  • Assigning a Value. Code consuming a property cannot set its value. But code that has access to the underlying storage can assign or change the value at any time.

    You can assign a value to a variable only in its declaration or in the constructor of a class or structure in which it is defined.

When to Use a ReadOnly Variable

There are situations in which you cannot use a Const Statement to declare and assign a constant value. For example, the statement might not accept the data type you want to assign, or you might not be able to compute the value at compile time with a constant expression. You might not even know the value at compile time. In these cases, you can use a variable to hold a constant value.

Important

If the data type of the variable is a reference type, such as an array or a class instance, its members can be changed even if the variable itself is . The following example illustrates this.

When initialized, the array pointed to by holds "x", "y", and "z". Because the variable is , you cannot change its value once it is initialized; that is, you cannot assign a new array to it. However, you can change the values of one or more of the array members. Following a call to the procedure , the array pointed to by holds "x", "M", and "z".

Note that this is similar to declaring a procedure parameter to be ByVal, which prevents the procedure from changing the calling argument itself but allows it to change its members.

Example

The following example defines a property for the date on which an employee was hired. The class stores the property value internally as a variable, and only code inside the class can change that value. However, the property is , and any code that can access the class can read the property.

The modifier can be used in these contexts:

Dim Statement

Property Statement

See Also

WriteOnly
Keywords

In iOS 7 and later or macOS v10.9 and later, Volume Purchase Program (VPP) App Assignment allows an organization to assign apps to users. At a later date, if a user no longer needs an app, you can reclaim the app license and assign it to a different user. In iOS 9 and later or macOS v10.11 and later, VPP can assign a license to the device serial number, so no Apple ID is required to download the app.

The Volume Purchase Program provides a number of web services that MDM servers can use to associate volume purchases with particular users or devices. The following services are currently supported:

Using Web Services

You access the services described in this chapter through the MDM payloads described in Structure of MDM Payloads.

Service Request URL

The service URL has the form of:

https://vpp.itunes.apple.com/WebObjects/MZFinance.woa/wa/<serviceName>

It is recommended that you obtain the service URLs from the service rather than using hard-coded values in the client. All service URLs are subject to change except for the URL.

Providing Parameters

Parameters to the service requests should be provided as a JSON string in the request body, and the header value should contain .

The value of a parameter can be in primitive type or string type. When the web services receive input parameters, all primitive types are converted to string type first before they are parsed into primitive types as required by the specific parameter. For example, requires a long type; the input in JSON format can be either or . The responses of the services use primitive type for non-string values.

Authentication

All services except require an parameter to authenticate the client user. This parameter takes a secret token (in string format). A Program Facilitator can obtain such a token by logging in to https://vpp.itunes.apple.com/.

On the Account Summary page, click the Download button to generate and download a text file containing the new token. Each token is valid for one year from the time you generate it. Once created, tokens are listed on the Account Summary page.

The MDM server should store the user’s token along with its other private, protected properties and should send this token value in the field of all VPP requests described in this chapter.

The blob itself is a JSON object in Base64 encoding. When decoded, the resulting JSON object contains three fields: , , and . For example, the following is an value (with line breaks inserted):

eyJ0b2tlbiI6InQxWG9VenBMRXRwZGxhK25zeENkd3JjdDBS
andkaWNOaGRreW5STW05VVAyc2hSYTBMUnVGcVpQM0pLQmJU
TWxDSE42ajNta1R6WVlQbVVkVXJXV2x3PT0iLCJleHBEYXRl
IjoiMjAxNC0wOC0xNVQxODoxMzo1Mi0wNzAwIiwib3JnTmFt
ZSI6Ik9SRy4yMDA5MDcxNjAwIn0=

After Base64 decoding, this is the JSON string (with line breaks inserted):

{"token":"t1XoUzpLEtpdla+nsxCdwrct0RjwdicNhdkynRMm9UP
2shRa0LRuFqZP3JKBbTMlCHN6j3mkTzYYPmUdUrWWlw==",
"expDate":"2014-08-15T18:13:52-0700",
"orgName":"ORG.2009071600"}

The field contains the expiration date of the token in ISO 8601 format. The field contains the name of the organization for which the token is issued.

Service Response

Response content is in JSON format.

As a convention, fields with values are not included in the response. For example, the user object has an field that is optional. The following example doesn’t have the field in the user object, so the field value is .

   "user":{
      "userId":1,
   "clientUserIdStr":"810C9B91-DF83-41DA-80A1-408AD7F081A8",
"itsIdHash":"C2Wwd8LcIaE2v6f2/mvu82Gs/Lc=",
      "status":"Associated",
      "licenses":[
         {
            "licenseId":2,
            "adamId":408709785,
            "productTypeId":7,
            "pricingParam":"STDQ",
            "productTypeName":"Software",
"isIrrevocable":false
         },
         {
            "licenseId":4,
            "adamId":497799835,
            "productTypeId":7,
            "pricingParam":"STDQ",
            "productTypeName":"Software",
"isIrrevocable":false
         }
      ]
   }

Note the licenses associated with the user are returned as an array. If the user doesn’t have a license, the “licenses” field does not show up. The license object in this context is a subfield of the user object. To avoid a cyclic reference, the user object is not included in the license object. But if the license is the top object returned, it includes a object with and fields and, if the user is already associated with an iTunes account, an field.

JSON escapes some special characters including slash (). So a URL returned in JSON looks like: .

For any service that requires authentication with an value, if the provided token is within the expiration warning period (currently 15 days before the expiration date), then the response contains an additional field, . The value of this field is the expiration date in ISO 8601 format. For example:

"tokenExpDate":"2013-07-26T18:12:09-0700"

If this field is present in the response, it should serve as a reminder that it is time to get a new blob in order to avoid any service disruption.

Retry-After Header

The VPP service may return a 503 Service Unavailable status to clients whose requests result in an unusually high load on the VPP service, or when the VPP service is experiencing loads beyond its current capacity to respond to requests. A Retry-After header may be included in this response, indicating how long the client must wait before making additional requests. Clients who make requests before this time may be rejected for even longer periods of time, or (in extreme cases) may have their VPP account suspended.

Avoid triggering the Retry-After header by setting the parameter in calls to .

The Retry-After response-header field may also be used with any 3xx (Redirection) response to indicate the minimum time the user-agent is asked to wait before issuing the redirected request (see RFC 2616: HTTP/1.1, Section 14.37). The value of this field can be either an HTTP-date or an integer number of seconds (in decimal) after the time of the response.

Two examples of its use are:

In the latter example, the delay is 2 minutes.

VPP Account Protection

It is reasonable behavior for a product that manages VPP app assignments to reset the VPP account by retiring all users and revoking all app assignments when it is first configured to use a VPP account. Therefore, it is very important that your product always sets the data as documented below so that other products that manage VPP accounts can know that the VPP account is being managed by another product and not reset the VPP account without warning.

To ensure that a VPP account is not being managed by another product, follow these steps every time your product starts a VPP session:

  • During initial setup, check the attribute returned from the request.

    • If is empty, create a JSON string with these keys and values:

      The UUID should be a standard 8-4-4-4-12 formatted UUID string and must be unique for each installation of your product.

      Write this JSON string to to claim this VPP account for your product.

    • If is not empty and does not match the value of your product, report the returned by and confirm that your product should take over from it. Do not rely on to confirm that your product still has a proper claim on the VPP account.

  • At the start of every subsequent VPP session, check to ensure that it still represents the correct installation of your product.

  • If no longer refers to your product, do not make any further requests to the VPP service for that VPP account until the account has been reactivated by administrator commands. Your product should report this isolation action to an administrator, giving the of the server that now claims to manage the VPP account.

Initial Import of VPP Managed Distribution Assigned Licenses Using getVPPLicensesSrv

It is not necessary to sync every single app license for a specific VPP account. In fact, you only need to track the assigned licenses. The recommended procedure for importing assigned licenses is to skip importing all of the licenses and instead start importing license counts and then changes. This can be accomplished in the following way:

  1. Send a request using with . This returns the current license count by .

  2. Send one request using . Record the and . Always set .

  3. Send another request to using the value from Step 2 and an value equal to . Always set .

  4. Record the value and begin syncing license updates and changes instead of all licenses. Always set .

Note: Using can result in batches with zero records in them. This is not an error or an end signal; just move to the next batch.

For further information, see Parallel getVPP Requests and getVPPLicensesSrv.

productTypeId Codes

Some service requests may return the ID of an Apple product type as a decimal integer, with one of these values:

productTypeId

Meaning

macOS software.

iOS or macOS App Store app.

book.

Managed Apple IDs

Managed Apple IDs were introduced in iOS 9.3. These accounts can be tied to the same organization as the VPP Program Facilitator users who manage licenses. When this is the case, the MDM server may choose to instruct the VPP service to associate Managed Apple IDs with given VPP users. This removes the need to send out an invitation (email or push) to users and wait for them to join by going through an acceptance process.

Managed Apple IDs are implemented through the following services by adding an optional parameter, :

Apple uses the Apple ID passed in to look up the user’s . If the VPP Program Facilitator account associated with the making the request is also a Managed Apple ID and that Apple ID’s is the same as the user’s, the VPP user will be linked to that Apple ID.

If the user cannot be found in the iTunes database, or the user is found but the user’s does not match the of the ’s associated user, the service response returns error 9635, .

Program Facilitators

As described in Authentication, Program Facilitators obtain from the iTunes VPP website the parameters that must be passed in VPP service requests. Each authenticates an organization through the associated Program Facilitator account that generated it.

Managed Apple IDs make it possble for multiple Program Facilitators to be linked together into a group. Each Program Facilitator in the group is assigned a . An can use this to access and change data associated with different Program Facilitators as long as the other Program Facilitators are in the same group. Using VPPClientConfigSrv, the MDM server can discover member info about all the other Program Facilitators whose data its can access, including the of each member.

All VPP service calls, except , accept an optional parameter. It is subject to these rules:

  • If a Program Facilitator’s is passed in a service request, the service is executed as if the request had been made with that Facilitator’s instead.

  • If a service request passes the of a Program Facilitator that was never associated with the requesting organization, or left it, or is no longer managed, an error is returned.

Here is an example of a response when the passed to it is associated with a group of three users, each of which has a different Program Facilitator:

{
"apnToken": "aJQGSAd+H7FrmIZn9K4IbRbXpge3ySkchugcfYK/ZXg=",
"appleId": "user1@someorg.com",
"clientContext": "{\"guid\":\"e91e570f-3eba-4b43-97d3-0f39450c8b92\",
\"hostname\":\"vpp-integrations2.apple.com\",\"ac2\":1}",
"countryCode": "US",
"email": "user1@someorg.com",
"facilitatorMemberId": 200841,
"organizationId": 2168850000179778,
"status": 0,
"vppGroupMembers": [
{
"appleId": "user3@someorg.com",
"clientContext": "test123test123test123",
"email": "user3@someorg.com",
"facilitatorMemberId": 200844,
"organizationId": 2168850000179778,
"locationId": 2167975000001686,
"locationName": "Central School"
},
{
"appleId": "user1@someorg.com",
"clientContext": "{\"guid\":\"e91e570f-3eba-4b43-97d3-0f39450c8b92\",
\"hostname\":\"vpp-integrations2.apple.com\",\"ac2\":1}",
"email": "user1@someorg.com",
"facilitatorMemberId": 200841,
"organizationId": 2168850000179778,
"locationId": 2167975000001686,
"locationName": "Central School"
},
{
"appleId": "user2@someorg.com",
"email": "user2@someorg.com",
"facilitatorMemberId": 200843,
"organizationId": 2168850000179778,
"locationId": 2167975000001686,
"locationName": "Central School"
}
]
}

Note that contains all of the members of the Program Facilitator’s group, including the calling member.

Read-Only Access

Using Apple School Manager and Managed Apple IDs, you can tailor different sets of privileges for individual Program Facilitators. This allows a finer range of control on what such users can do. For example, a Program Facilitator that has only the “Read Only” privilege can use the , , and services but not use , , or . You can also assign Program Facilitators “Can Purchase” and/or “Can Manage” privileges, so an individual Program Facilitator could manage licenses but not buy them. (Note that purchasing users and managing users automatically have read privileges.)

Error Codes

When a service request results in error, there are normally two fields containing the error information in the response: an field and an field. There could be additional fields depending on the error. The field contains human-readable text explaining the error. The field is intended for software to interpret. Any value uniquely maps to an value, but not the other way around. The possible values are defined as follows:

errorNumber

Meaning

Missing required argument

Login required

Invalid argument

Internal error

Result not found

Account storefront incorrect

Error constructing token

License is irrevocable

Empty response from SharedData service

Registered user not found

License not found

Admin user not found

Failed to create claim job

Failed to create unclaim job

Invalid date format

OrgCountry not found

License already assigned (see Error Code 9616)

The user has already been retired

License not associated

The user has already been deleted

The token has expired. You need to generate a new token online using your organization’s account at https://vpp.itunes.apple.com/.

Invalid authentication token

Invalid Apple push notification token

License was refunded and is no longer valid.

The sToken has been revoked.

License already assigned to a different user. The MDM server should retry the assignment with a different license.

Ineligible device assignment: MDM tried to assign an item to a serial number but device assignment is not allowed for that item.

Too many recent already-assigned errors: If MDM gets the same 9616 error from assignments for the same organization, user identifier, and item identifier (license ID, adam ID, or pricing parameter) and does so within too short a time (generally several minutes), it may return this error code.

Too many recent no-license errors: If MDM gets the same 9610 error from assignments for the same organization, user identifier, and item identifier (license ID, adam ID, or pricing parameter) and does so within too short a time (generally several minutes), it may return this error code.

Too many recent manage-license calls with identical request: If MDM gets precisely the same request to too many times within too short a time (generally several minutes), it may return this error code.

Data for a batch token passed could not be recovered.

Returned when a caller tries to use a formerly deprecated featured that has been removed.

Apple ID passed for iTunes Store association cannot be found or is not applicable to organization of the user (see Managed Apple IDs).

Registered user not found.

is not allowed to perform the operation requested.

Facilitator account that generated has no Managed ID organization ID and cannot manipulate the facilitator member requested.

No facilitator member could be found for the facilitator member ID requested.

Account details of the facilitator member ID requested could not be recovered (likely a transient issue).

Apple ID already associated to registered user.

Apple ID passed cannot be used at this time because it's a VPP manager and the iTunes Store account not yet created and such creation requires user to agree to Terms.

Additional error types may be added in the future.

Error Code 9616

Error number is returned when an attempt is made to assign a license to a user that already has a license for the specified app or book, in which case there is no need to retry the assignment.

Additional information is returned to MDM when a error occurs. Sometimes it’s because the specific user in the request is already assigned to the item in question. When that happens the error is accompanied by a entry with details about the user and the license. For example,

"XuHVGvasXcfEVUUn4EP2wjHEUK00s=","userId":9918783273,"productTypeId":8,
"isIrrevocable":false,"adamIdStr":"778658393","userIdStr":"9918783273",
"licenseIdStr":"99147599840","productTypeName":"Application",
"clientUserIdStr":"xxutt8-e079-4b05-b403-a0792890",
"licenseId":9147599840,"adamId":778658393,"status":"Associated"},
"errorMessage":"License already assigned","errorNumber":9616,"status":-1}

Alternatively, a error may have a entry in the response with information about the one or more other users who already have the item in question. In these cases, the VPP user specified by the user ID or the does not have the item, but some other users in the organization associated with the same iTunes Store account has the item. If that happens, the server returns and information about those other users:

{"errorMessage":"License already assigned",
"regUsersAlreadyAssigned":[{"itsIdHash":"XXX2CVvZar9YZnpqJxV0SHOUCU=",
"clientUserIdStr":"jjjCXhHHee0e3c-x999-43a9-Xe04-1dcax80ac01x",
"userId":9991992450,"email”:”user@example.apple.com","status":"Associated"}],"
"errorNumber":9616,"status":-1}

The Services

The following are the web services exposed to the Internet that can be requested by your client.

registerVPPUserSrv

The request takes the following parameters:

Parameter Name

Required or Not

Example

Required.

.

Not required.

.

Required.

.

Not required.

See Program Facilitators.

Not required.

.

is a string field. It can be, for example, the GUID of the user. The strings must be unique within the organization and may not be changed once a user is registered. It should not, for example, be an email address, because an email address might be reused by a future user.

When a user is first registered, the user’s initial status is . If the user has already been registered, as identified by , the following occurs:

  • If the user’s status is or , that active user account is returned.

  • If the user’s status is and the user has never been assigned to an iTunes account, the account’s status is changed to and the existing user is returned.

  • If the user’s status is and the user has previously been assigned to an iTunes account, a new account is created.

Thus, it is possible for more than one user record to exist for the same value—one for each iTunes account that the value has been associated with in the past (in addition to a currently active record or a retired and never-associated record). Each of these users has a unique value. Over time, with iTunes Store assignment, retirement, and reassignment, it is possible for the value of the active user for a given to change.

Further, if two user identifiers exist for a given , one assigned to an iTunes account and the other unassigned, and a user accepts an invitation to be associated, it is possible for the user to use the same iTunes account that he or she used previously. If the user does, the unassigned user record gets marked with the status, and the formerly retired user record gets moved to the status.

The parameter is discussed in Managed Apple IDs.

When registering multiple users, registerVPPUserSrv requests can be made in parallel.

The response contains some of these fields:

Field Name

Example of Value

for success, for error.

.

.

getVPPUserSrv

The request takes the following parameters:

Parameter Name

Required or Not

Example

One of these is required, but is deprecated.

.

.

Not required.

.

Required.

.

Not required.

See Program Facilitators.

If a value is passed for , an (iTunes Store ID hash) value may be passed, but is optional. If a value is passed for is passed, that value is used, and and are ignored.

The request returns users with any status—, , , and , as described below:

  • A status indicates the user has been created in the system by making a request, but is not yet associated with an iTunes account.

  • An status indicates that the user has been associated with an iTunes account. When a user is associated with an iTunes account, an value is generated for the user record.

  • A status indicates that the user has been retired by making a request.

  • A status indicates that a VPP user is retired and its associated iTunes user has since been invited and associated with a new VPP user that shares the same . Because there are two VPP users with distinct values but the same value, the status is used to ensure database consistency.

    This status appears only in the service response, and only when a value is used to get a VPP user instead of a value. A user with a status, fetched by , will never change status again; its sole purpose is to ensure that your software can recognize that the is no longer associated with the record, and can update any internal references appropriately.

Thus, it is possible for more than one user record to exist for the same value—one for each iTunes account that the value has been associated with in the past (in addition to a currently active record or a retired and never-associated record). However, no more than one of these records can be active at any given time.

When a new record is associated with a value that has previously been associated with a different user, because the is still associated with the same iTunes user when it is retired and associated again, any irrevocable licenses originally associated with the retired VPP user, if any, are moved to the new VPP user (as identified by ) automatically.

If you use a value to fetch the VPP user after such a reassociation, the status of that user changes from to . If you use values to fetch the VPP users after the association, the status of the first VPP user changes from to , and the status of the second VPP user changes from to .

To obtain only the record for the currently active user matching a value, your MDM server passes the by itself. If no users for the are active (all are retired or no matching record exists), returns a "result not found" error number.

To obtain an old, retired user record that was previously associated with an iTunes Store account, your MDM server can pass either the for that record or the and for that record.

All user record responses for this request include an if the user is associated with an iTunes account.

The response contains some of these fields:

Field Name

Example of Value

0 for success, -1 for error.

.

.

The field is omitted if the account is not yet associated with an iTunes Store account.

Note the user object returned includes a list of licenses assigned to the user.

getVPPUsersSrv

The request takes the following parameters:

Parameter Name

Required or Not

Example

Not required.

.

Not required.

.

Not required.

.

Not required.

.

Required.

.

Not required.

See Program Facilitators.

The and values are generated by the server, and the value can be several kilobytes in size.

You can use this endpoint to obtain a list of all known users from the server and to keep your MDM system up-to-date with changes made on the server. To use this endpoint, your MDM server does the following:

  • Makes an initial request to with no or (optionally with the field).

    This request returns all user records associated with the provided .

  • If the number of users exceeds a server controlled limit (on the order of several hundred), a value is included in the response, along with the first batch of users. Your MDM server should pass this value in subsequent requests to get the next batch. As long as additional batches remain, the server returns a new value in its response.

  • Once all records have been returned for the request, the server includes a value in the response. Your MDM server should pass this token in subsequent requests to get users modified since that token was generated.

    Even if no records are returned, the response still includes a for use in subsequent requests.

The value contains if retired users should be included in the results, otherwise it contains .

If is provided, the value of is ignored. If is provided and is , only retired users modified since the date in the token will be returned.

Note: The value encodes the original value of ; therefore, if a value is present on the request, the field (if passed) is ignored.

The response contains some of these fields:

Field Name

Example of Value

for success, for error.

Note that the field is present only for users whose status is , not for users whose status is or status.

Note that this value is returned only for requests that do not include a value.

.

.

Note that this field is present only if there are more entries left to read.

Note that this field is present only if is not (that is, only after the last batch of users has been returned).

The field is omitted if the account is not yet associated with an iTunes Store account.

The field contains an estimate of the total number of records that will be returned.

getVPPLicensesSrv

The request takes the following parameters:

Parameter Name

Required or Not

Example

Not required.

.

Not required.

.

Not required.

.

Required.

.

Not required.

See Program Facilitators.

Not required.

Defaults to .

Not required.

”PLUS”

Not required.

"C9JQ5QWMXRGH”

Not required.

Defaults to .

Not required.

Defaults to .

The and values are generated by the server, and the value can be several kilobytes in size.

You can use this endpoint to obtain a list of licenses from the server and to keep your MDM system up-to-date with changes made on the server. To use this endpoint, your MDM server does the following:

  • Makes an initial request to with no or .

    This request returns all licenses associated with the provided .

  • If the number of licenses exceeds a server controlled limit (on the order of several hundred), a value is included in the response, along with the first batch of users. Your MDM server should pass this value in subsequent requests to get the next batch. As long as additional batches remain, the server returns a new value in its response.

  • Once all records have been returned for the request, the server includes a value in the response. Your MDM server should pass this token in subsequent requests to get licenses modified since that token was generated.

    Even if no records are returned, the response still includes a for use in subsequent requests.

Note: The and encode whether and were originally passed; therefore, if the or is present on the request, the and fields (if passed) are ignored.

If is specified, must be specified. Otherwise, the pricing parameter is ignored.

If is specified, only licenses assigned to that serial number are returned.

If the parameter is set to , only licenses currently associated with an Apple ID or a device serial number are returned. When the parameter is omitted, all license records are returned regardless of association status. It is highly recommended to set the parameter to , for performance reasons.

If is specified, only licenses currently assigned to users are returned.

If is specified, only licenses currently assigned to devices are returned.

The parameters and are exclusive. They should never both be true in the same request.

If a parameter is not passed in the request, the VPP service returns all licenses (both PLUS and STDQ values).

The response contains some of these fields:

Field Name

Example of Value

for success, for error.

.

Note that this value is returned only for requests that do not include a token.

Indicates the total number of round trips that will be necessary to get the full result set.

.

.

Note that this field is present only if there are more entries left to read.

Note that this field is present only if is not (that is, only after the last batch of users has been returned).

Licenses that are assigned to a user contain , , and fields, as shown in the second example above. The field contains the total number of round trips that are necessary to get all records in the request. This can be used to provide a progress indicator when compared to the number of batches processed so far.

Note:  The value is returned only on the request that started the batch process (the listing request issued without any tokens), because the actual number of licenses or users returned can be different by the time the client has finished.

One of a set of sequential batch requests may return an error. It is also possible to get a response from a listing call that includes no token but also no error number. Because all listing API requests should return either a batch or token, do not interpret an error or the lack of a token for an individual batch to mean that the last batch has been received. The last batch is signified by the inclusion of a . If an individual batch request fails, the MDM server should retry the same batch using the same .

Receiving a response typically indicates that the VPP server couldn’t provide timely processing. Nothing is necessarily wrong with the request. When the MDM server receives this response, it should send the current request again. If it continues to receive errors after more than five attempts, it may mean that the VPP service is unexpectedly down and further retries should be scheduled for minutes later, instead of seconds.

Parallel getVPP Requests

Both the  and  services can accept multiple requests in parallel, instead of sequentially, which can significantly reduce the amount of time required to request all licenses and users. You start by making an initial request to receive a . Subsequent requests can be submitted in parallel by submitting the same and including an value from 1 to , which is now returned with requests. The request in which the value is equal to the returns the new .

It is advisable not to submit more than five requests simultaneously.

getVPPAssetsSrv

This service returns an enumeration of the assets ( tuples) for which an organization has licenses, along with an optional count of the total number of licenses and the number of licenses available for each asset.

Parameter Name

Required or Not

Example

Not required. Defaults to .

.

Required.

.

Not required.

”PLUS” or “STDQ”.

Not required.

See Program Facilitators.

If is set to true, the total number of licenses, the number of licenses assigned, and the number of licenses unassigned are included with the response for each asset.

if is specified, only assets purchased with that pricing parameter will be included in the result.

Field Name

Example of Value

4

The field is only returned when using a location token with an account that has migrated to VPP in Apple School Manager.

contentMetadataLookupUrl

The in the response allows an MDM server to query the iTunes Store for app and book metadata. When the VPP is included in the request as a cookie, an MDM server can also get authenticated app metadata for B2B apps already owned by the VPP account, as well as apps that can still be redownloaded but can no longer be purchased.

The URL query string tells the content metadata lookup service what app or book to look up. The VPP must be included as a cookie named to access the authenticated metadata.

Content is filtered by platform. The valid platform values for the query parameter are: , , , , , , , and . For example, to get B2B app content, append to your query string.

Here is an example of the URL to look up an app: https://uclient-api.itunes.apple.com/WebObjects/MZStorePlatform.woa/wa/lookup?version=2&id=361309726&p=mdm-lockup&caller=MDM&platform=itunes&cc=us&l=en.

Here is an example of what a response might look like:

{
"isAuthenticated": false,
"results": {
"361309726": {
"artistId": "284417353",
"artistName": "Apple",
"artistUrl": "https://itunes.apple.com/us/artist/apple/id284417353?mt=8",
"artwork": {
"bgColor": "ffb800",
"height": 1024,
"supportsLayeredImage": false,
"textColor1": "161616",
"textColor2": "161616",
"textColor3": "453712",
"textColor4": "453712",
"url": "http://is5.mzstatic.com/image/thumb/ Purple3/v4/72/7d/38/727d38ee-9245-eda6-1188-3458133bd99a/source/{w}x{h}bb.{f}",
"width": 1024
},
"bundleId": "com.apple.Pages",
"contentRatingsBySystem": {
"appsApple": {
"name": "4+",
"rank": 1,
"value": 100
}
},
"copyright": "\u00a9 2010 - 2015 Apple Inc.",
"description": {
                "standard": "Pages is the most beautiful word processor you\u2019ve ever seen on a mobile device. This powerful word processor helps you create gorgeous reports, resumes, and documents in minutes. Pages has been designed exclusively for the iPad, iPhone, and iPod touch with support for Multi-Touch gestures and Smart Zoom.\n\nGet a quick start by using one of over 60 Apple-designed templates. Or use a blank document and easily add text, images, shapes, and more with a few taps. Then format using beautiful preset styles and fonts. And use advanced features like change tracking, comments, and highlights to easily review changes in a document.\n\nWith iCloud built in, your documents are kept up-to-date across all your devices. You can instantly share a document using just a link, giving others the latest version and the ability to edit it directly from www.icloud.com using a Mac or PC browser.\n\nPages 2.0 is updated with a stunning new design and improved performance. And with a new unified file format across Mac, iOS, and web, your documents are consistently beautiful everywhere you open them.\n\nGet started quickly\n\u2022 Choose from over 60 Apple-designed templates to instantly create beautiful reports, resumes, cards, and posters\n\u2022 Import and edit Microsoft Word and plain text files using Mail, a WebDAV service, or iTunes File Sharing\n\u2022 Quickly browse your document using the page navigator and see a thumbnail preview of each page\n\u2022 Turn on Coaching Tips for guided in-app help\n\nCreate beautiful documents\n\u2022 Write and edit documents using the onscreen keyboard or a wireless keyboard with Bluetooth\n\u2022 Format your document with gorgeous styles, fonts, and textures\n\u2022 Your most important text formatting options are right in your keyboard, and always just a tap or two away\n\u2022 Easily add images and video to your document using the Media Browser\n\u2022 Use auto-text wrap to flow text around images\n\u2022 Animate data with new interactive column, bar, scatter, and bubble charts\n\u2022 Organize your data easily in tables\n\nAdvanced writing tools\n\u2022 Turn on change tracking to mark up a document as you edit it\n\u2022 Use comments and highlights to share ideas and feedback with others\n\u2022 Create footnotes and endnotes and view word counts with character, paragraph, and page counts\n\u2022 Automatic list making and spellchecking \n\u2022 Create and view impressive 2D, 3D, and interactive bar, line, area, and pie charts\n\u2022 Use Undo to go back through your previous changes\n\niCloud\n\u2022 Turn on iCloud so your documents are automatically available on your Mac, iPad, iPhone, iPod touch, and iCloud.com\n\u2022 Access and edit your documents from a Mac or PC browser at www.icloud.com with Pages for iCloud beta\n\u2022 Pages automatically saves your documents as you make changes\n\nShare your work\n\u2022 Use AirDrop to send your document to anyone nearby\n\u2022 Quickly and easily share a link to your work via Mail, Messages, Twitter, or Facebook \n\u2022 Anyone with a shared document link always has access to the latest version of the document and can edit it with you at iCloud.com using Pages for iCloud beta\n\u2022 Export your document in ePub, Microsoft Word, and PDF format\n\u2022 Use \u201cOpen in Another App\u201d to copy documents to apps such as Dropbox\n\u2022 Print wirelessly with AirPrint, including page range selection, number of copies, and two-sided printing\n\nSome features may require Internet access; additional fees and terms may apply.\nPages does not include support for some Chinese, Japanese, or Korean (CJK) text input features such as vertical text.\nPages for iCloud beta is currently available in English only."
},
"deviceFamilies": [
"iphone",
"ipad",
"ipod"
],
"editorialArtwork": {
"originalFlowcaseBrick": {
"bgColor": "ffb700",
"height": 600,
"supportsLayeredImage": false,
"textColor1": "161616",
"textColor2": "161616",
"textColor3": "453612",
"textColor4": "453612",
"url": "http://is4.mzstatic.com/image/ thumb/Features5/v4/22/60/94/226094a4-ed02-a234-7576-6de696ead0ba/source/{w}x{h}{c}.{f}",
"width": 3200
}
},
"editorialBadgeInfo": {
"editorialBadgeType": "staffPick",
"nameForDisplay": "Essentials"
},
"genreNames": [
"Productivity",
"Business"
],
"genres": [
{
"mediaType": "8",
"name": "Productivity",
"url": "https://itunes.apple.com/us/genre/id6007"
},
{
"mediaType": "8",
"name": "Business",
"url": "https://itunes.apple.com/us/genre/id6000"
}
],
"id": "361309726",
"kind": "iosSoftware",
"latestVersionReleaseDate": "Sep 15, 2015",
"name": "Pages",
"nameRaw": "Pages",
"offers": [
{
"actionText": {
"downloaded": "Installed",
"downloading": "Installing",
"long": "Buy App",
"medium": "Buy",
"short": "Buy"
},
"assets": [
{
"flavor": "iosSoftware",
"size": 278782033
}
],
"buyParams": "productType=C&price=9990&
salableAdamId=361309726&pricingParameters=STDQ&appExtVrsId=813292538",
"price": 9.99,
"priceFormatted": "$9.99",
"type": "buy",
"version": {
"display": "2.5.5",
"externalId": 813292538
}
}
],
"releaseDate": "2010-04-01",
"shortUrl": "https://appsto.re/us/EysIv.i",
"url": "https://itunes.apple.com/us/app/pages/id361309726?mt=8",
"userRating": {
"ratingCount": 24848,
"ratingCountCurrentVersion": 236,
"value": 3.5,
"valueCurrentVersion": 3
},
"whatsNew": "This update contains stability improvements and bug fixes."
}
},
"version": 2
}

retireVPPUserSrv

This service disassociates a VPP user from its iTunes account and releases the revocable licenses associated with the VPP user. Currently, ebook licenses are irrevocable. The revoked licenses can then be assigned to other users in the organization. A retired VPP user can be reregistered, in the same organization, by making a request.

The request takes the following parameters:

Parameter Name

Required or Not

Example

One of these is required. takes precedence.

.

.

Required.

.

Not required.

See Program Facilitators.

If the user passes the value for an already-retired user, this request returns an error that indicates that the user has already been retired.

The response contains some of these fields:

Field Name

Example of Value

for success, for error.

.

.

The field is omitted if the account is not yet associated with an iTunes Store account.

manageVPPLicensesByAdamIdSrv

This API supersedes the and APIs as a more flexible and efficient way of changing license assignments. It offers bulk license association and disassociation in one request, with some optional flags to control back end behavior.

Parameter Name

Required or Not

Required.

Required.

One (and only one) of these is required to associate licenses.

One (and only one) of these is required to disassociate licenses.

Not required.; defaults to .

Required.

Not required.

Parameter Name

Example

0 thoughts on “Warning Assignment Of Read-Only Location History

Leave a Reply

Your email address will not be published. Required fields are marked *