Recently, ios15 was updated, and the enterprise signed and upgraded, resulting in being blocked I think of the 100 binding places of Apple's personal development account. Due to the nature of some app s, I can't use the super signing function of a third party, so I look around and piece it up.
Summarize the process:
Preparation materials: developer account renewal, developer account Certificate creation (Certificates) and identity authentication creation (Identifiers). Certificate creation and identity authentication creation can be implemented in the interface. In order to save effort, they are created in the background Sign In - Apple
1, Get user equipment information
2, The user equipment information is uploaded to apple in the background
III
Deficiencies, we need more guidance.
Get user equipment information
First, get the user installation description file of UDID To get the user's device information
Operation step 1: the user downloads the description file 2. Set up a common installation description file 3. After installation, the required information will be sent to the server through the notification address in the description file 4. Server receiving message processing
This is the process of obtaining udid. The following is the specific method
1. Description file preparation
The following is the content of the description file, which can be modified according to your own situation
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadContent</key> <dict> <key>URL</key> <string>https://XXXXXXXXX.com/test.apsx</string> <!-- Notification address -- > <key>DeviceAttributes</key> <array> <string>UDID</string> <!--Add the parameters you need to obtain--> <string>DEVICE_NAME</string> <string>VERSION</string> <string>PRODUCT</string> <string>MAC_ADDRESS_EN0</string> <string>IMEI</string> <string>ICCID</string> </array> </dict> <key>PayloadOrganization</key> <string>brief introduction</string> <key>PayloadDisplayName</key> <string>name</string> <key>PayloadVersion</key> <integer>1</integer> <key>PayloadUUID</key> <string>B5F0BB7E-4E7E-CAD8-BFB5-492F32FB831B</string> <key>PayloadIdentifier</key> <string>xxx</string> <key>PayloadDescription</key> <string>brief introduction</string> <key>PayloadType</key> <string>Profile Service</string> </dict> </plist>
Copy the above code to local Save it with the suffix demo.mobileconfig and put it on the server side
Configure MIME in the server
Extension:. mobileconfig
Type: application / x-application-aspen-config
Create a new html There is a link to the description file download just now
<a href="./demo.mobileconfig">Point me</a>
After opening in Apple's default browser, click to prompt Is it installed Click allow
In the settings common description file Click the corresponding description file to view the configuration details
2. Server
After the user installs the description file, Apple will send the user device information to the address configured in the file
<string>https://XXXXXXXXX.com/test.apsx</string> <!-- Notification address -- >
The sending content is as follows:
0? *?H?? ??0?10 0? *?H?? ??$???<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>IMEI</key> <string>35 ***** ******* 2</string> <key>PRODUCT</key> <string>iPhone10,3</string> <key>UDID</key> <string>3931e******************032b2bd</string> <key>VERSION</key> <string>1****</string> </dict> </plist> ?? [0??0?\? ?????b?0 *?H?? 0Z10 UUS10U
The front and back parts are garbled Just intercept the middle xml part
. net as an example
int start = curTxt.IndexOf("<!DOCTYPE plist"); //Get xml start index int end = curTxt.IndexOf("</plist>"); //Gets the index at the end of the xml string xml = curTxt.Substring(start, end - start + "</plist>".Length); //Get xml content
In the obtained xml content, we only use Module of dict node The data inside is a row of key s A line of value, so you can loop the node object to get the udid
string udid = string.Empty; int index = 0; foreach (XmlElement item in q.ChildNodes) { switch (item.InnerText.ToUpper()) { case "UDID": udid = q.ChildNodes[index + 1].InnerText; //After the corresponding key is obtained, the index is added with 1 to obtain the value break; default: break; } index++; }
Here we are The user UDID has been obtained
Finally, we need to do a 301 redirect here, otherwise Apple will think that the description file installation failed
string url = "https://*********/test.html?UDID=123*************23; Response.StatusCode = 301; Response.Status = "301 Moved Permanently"; Response.AppendHeader("Location", url); Response.AppendHeader("Cache-Control", "no-cache"); Response.End();
Here we are Get user UDID processing completed