赞
踩
最近ios15上新,企业签升级导致被封 想起了苹果的个人开发账号的100个绑定名额,由于一些app性质原因,用不了第三方的超级签功能所以东找西找拼凑出来这么一套。
总结出流程 :
准备材料:开发者账号续费,开发者账号证书创建(Certificates),身份认证创建(Identifiers),其中证书创建和身份认证创建都是可以在接口中实现,这边为了省力就在后台创建了 Sign In - Apple
一、获取用户设备信息
二、用户设备信息上传到苹果开发者后台.
三、新建描述文件信息并下载
四、对ipa包重新签名并重新发布新包
不足之处大家多多指导。
获取用户设备信息
首先获取UDID的需要苹果用户安装 描述文件 来获取用户的设备信息
操作步骤 1、用户下载描述文件 2、设置通用中安装描述文件 3、安装好后会通过描述文件中的通知地址 发送需要的信息到服务端 4、服务端接收消息处理
获取udid的流程就是这样,下面是具体方式
1、描述文件准备
下面是描述文件的内容,根据自己的情况修改
- <?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> <!--通知地址-->
- <key>DeviceAttributes</key>
- <array>
- <string>UDID</string> <!--需要获得的参数往里加-->
- <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>简介</string>
- <key>PayloadDisplayName</key>
- <string>名称</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>简介</string>
- <key>PayloadType</key>
- <string>Profile Service</string>
- </dict>
- </plist>

以上代码复制到本地 以demo.mobileconfig 后缀名保存,然后放到服务器端
在服务器中配置MIME
扩展名: .mobileconfig
类型:application/x-apple-aspen-config
新建一个html 里面放个链接 指向刚刚的描述文件下载
<a href="./demo.mobileconfig">点我</a>
在苹果默认浏览器中打开后点击 会提示 是否安装 点击允许即可
在设置通用描述文件中 可点击对应的描述文件查看配置的详细信息
2、服务端
用户安装完描述文件后 苹果会发送用户设备信息到文件中配置的地址
<string>https://XXXXXXXXX.com/test.apsx</string> <!--通知地址-->
发送内容如下:
- 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

前后部分都是乱码 只要截取中间xml部分内容即可
.net为例
- int start = curTxt.IndexOf("<!DOCTYPE plist"); //获取xml开始的索引
- int end = curTxt.IndexOf("</plist>"); //获取xml结束的索引
- string xml = curTxt.Substring(start, end - start + "</plist>".Length); //获取xml内容
获取到的xml内容中 我们只用到了 dict节点的模块 里面的数据 是一行key 一行value 所以这里可以循环节点对象获取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; //获取到对应的key之后 索引加1 获取值
- break;
- default:
- break;
- }
- index++;
- }
到此 用户UDID已经获取到手
最后 这里还需要做一个301重定向不然苹果会认为描述文件安装失败
- 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();
到此 获取用户UDID 已处理完成
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。