Django 接收 苹果设备udid
苹果设备发送的是xml字节流到服务器,因此,服务器需要提取对应的数据
def udid_bytes_to_dict(xml_stream): new_uuid_info = {} try: a = xml_stream.find('<plist') b = xml_stream.find('</plist>') xml_dict = xmltodict.parse(xml_stream[a:b + 8]) # 解析xml字符串 for i in range(len(xml_dict['plist']['dict']['key'])): new_uuid_info[xml_dict['plist']['dict']['key'][i].lower()] = xml_dict['plist']['dict']['string'][i] except Exception as e: logger.error("udid_xml_stream:%s Exception:%s" % (xml_stream, e)) return None return new_uuid_info
还需要一个view方法用与接收数据,最后还需要跳转页面
from django.views import View from django.http import HttpResponsePermanentRedirect class IosUDIDView(View): def post(self, request, short): stream_f = str(request.body) format_udid_info = udid_bytes_to_dict(stream_f) logger.info("short %s get new udid %s" % (short, format_udid_info)) server_domain = get_redirect_server_domain(request) try: pass #业务逻辑处理 except Exception as e: logger.error("short %s receive udid Exception:%s" % (short, e)) return HttpResponsePermanentRedirect("%s/%s?udid=%s" % (server_domain, short, format_udid_info.get("udid")))
这样就可以解析数据了
描述文件生成参考连接
参考方法
def make_udid_mobileconfig(udid_url, PayloadOrganization, appname, PayloadUUID=uuid.uuid1(), PayloadDescription='该文件仅用来获取设备ID,帮助用户安装授权', PayloadDisplayName='设备安装授权'): # <!--参考:https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/iPhoneOTAConfiguration/ConfigurationProfileExamples/ConfigurationProfileExamples.html--> mobileconfig = '''<?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>%s</string> <key>DeviceAttributes</key> <array> <string>SERIAL</string> <string>UDID</string> <string>IMEI</string> <string>ICCID</string> <string>VERSION</string> <string>PRODUCT</string> </array> </dict> <key>PayloadOrganization</key> <string>%s</string> <key>PayloadDisplayName</key> <string>%s</string> <key>PayloadVersion</key> <integer>1</integer> <key>PayloadUUID</key> <string>%s</string> <key>PayloadIdentifier</key> <string>%s.profile-service</string> <key>PayloadDescription</key> <string>%s</string> <key>PayloadType</key> <string>Profile Service</string> </dict> </plist>''' % (udid_url, PayloadOrganization, appname + " -- " + PayloadDisplayName, PayloadUUID, PayloadOrganization, PayloadDescription) return mobileconfig