2009-03-05 11 views

risposta

8

Questa è la sintassi che cercavo, funziona con iPhone e iPod Touch:

uastring = self.request.headers.get('user_agent') 
if "Mobile" in uastring and "Safari" in uastring: 
    # do iphone/ipod stuff 
+2

ottengo 'AttributeError: oggetto 'WSGIRequest' non ha alcun attributo 'headers''. – noio

3

This article delinea alcuni modi di rilevare un iPhone attraverso controllando la variabile agente HTTP_USER_AGENT. A seconda di dove vuoi fare il check-in (livello HTML, Javascript, CSS, ecc.), Sono sicuro che puoi estrapolarlo nella tua app Python. Scusa, non sono un tipo pitone. 8^D

1

Controllare l'user agent. Sarà

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

Non sono sicuro di come fare questo con AppEngine, ma il codice PHP equivalente può essere trovato qui: http://www.mattcutts.com/blog/iphone-user-agent/

+0

Beh, cambierà. I bit chiave che un'app dovrebbe verificare sono "iPhone" e "AppleWebKit": l'utilizzo di quella stringa esatta ti morderà nel culo la prossima volta che Safari riceverà un rilascio. – ceejayoz

+0

No, i bit chiave sono Mobile/(qualcosa) e Safari/(qualcosa). "iPhone" non sarà presente su un iPod touch. –

+1

Come si presenta un androide? Si basa sul webkit e non sarei sorpreso se mettesse Safari nella sua UA (chrome fa questo, iirc). –

2

Ecco come fare implementarlo come middleware in Django, assumendo che questo sia cosa stai usando su 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 

Fondamentalmente cercare "iPhone" in HTTP_USER_AGENT. Tieni presente che iPod Touch ha una firma leggermente diversa rispetto all'iPhone, da cui la ricerca "iPhone" ampia anziché una ricerca più restrittiva.

2

se si sta utilizzando il quadro webapp di serie il programma utente sarà nell'istanza richiesta. Questo dovrebbe essere abbastanza buono:

if "iPhone" in request.headers["User-Agent"]: 
    # do iPhone logic 
+2

Credo che il codice dovrebbe dire self.request.headers [ "User-Agent"] Questa grande opera per me. Grazie – mcotton

3

La Using the Safari on iPhone User Agent String articolo sul sito web di Apple indicano i diversi agenti utente per iPhone e 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 
1
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...') 
Problemi correlati