如何检测我的AppEngine应用是否被iPhone/iPod Touch访问?

11
如果页面是通过iPhone/iPod Touch访问的,我需要以不同的方式呈现页面。 我想请求对象中包含这些信息,但语法是什么?
7个回答

7
这是我正在寻找的语法,可与iPhone和iPod Touch一起使用:
uastring = self.request.headers.get('user_agent')
if "Mobile" in uastring and "Safari" in uastring:
  # do iphone / ipod stuff

2
我收到了 AttributeError: 'WSGIRequest' object has no attribute 'headers' 的错误。 - noio

2

苹果网站上的《使用iPhone Safari用户代理字符串》文章介绍了iPhone和iPod touch的不同用户代理。

Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3
Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3
Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/XXXXX Safari/525.20

2

这篇文章介绍了通过检查HTTP_USER_AGENT代理变量来检测iPhone的几种方法。根据您想在哪里进行检查(HTML级别、Javascript、CSS等),我相信您可以将其推广到您的Python应用程序中。抱歉,我不是Python专家。8^D


1

以下是如何在Django中将其实现为中间件的方法,假设您正在使用appengine。

class DetectiPhone(object):
    def process_request(self, request):
        if 'HTTP_USER_AGENT' in request.META and request.META['HTTP_USER_AGENT'].find('(iPhone') >= 0:
            request.META['iPhone'] = True

基本上在HTTP_USER_AGENT中查找“iPhone”。请注意,iPod Touch的签名与iPhone略有不同,因此使用广泛的“iPhone”搜索而不是更严格的搜索。


1
如果您正在使用标准的 Web 应用程序框架,则用户代理将在请求实例中。这应该足够好:
  if "iPhone" in request.headers["User-Agent"]:
    # do iPhone logic

2
我认为你的代码应该写成 self.request.headers["User-Agent"]。这对我非常有效。谢谢。 - mcotton

0
import os

class MainPage(webapp.RequestHandler):
  @login_required
  def get(self):
    userAgent = os.environ['HTTP_USER_AGENT']
    if userAgent.find('iPhone') > 0:
      self.response.out.write('iPhone support is coming soon...')
    else:
      self.response.out.write('Hey... you are not from iPhone...')

0

检查用户代理。它将是

Mozilla/5.0(iPhone; U; CPU like Mac OS X; en)AppleWebKit/420+(KHTML,like Gecko)Version/3.0 Mobile/1A543a Safari/419.3

我不确定如何在appengine中实现这一点,但等效的PHP代码可以在此处找到:http://www.mattcutts.com/blog/iphone-user-agent/


好的,这将会改变。应用程序应检查的关键位是"iPhone"和"AppleWebKit" - 使用准确的字符串将在下一次Safari发布新版本时让你很烦恼。 - ceejayoz
不,关键在于Mobile/(某些内容)和Safari/(某些内容)。iPod touch上不会有“iPhone”。 - Becca Royal-Gordon
1
安卓系统显示为什么?它基于Webkit,如果它将Safari放入其UA中(Chrome也是如此,如果我没记错的话),我不会感到惊讶。 - Richard Levasseur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接