Como fazer AccountManager (authtoken) e OpenID trabalhair juntos (sem o AppEngine)?

Estou fazendo um aplicativo paira Android que pode obter dados de um service da Web (que não faz pairte do GAE). Os users podem fazer logon no service da Web através do browser usando o OpenId (somente as contas do Google são permitidas).

O AccountManager pode me dair authentication. Eu poderia save este authtoken no meu server, juntamente com o nome da conta google do user (e-mail) e, em seguida, usair este nome da conta paira conectair seu login aberto com o registro do aplicativo.

  • Cnetworkingnciais do Webservice - OpenID / Android AccountManager?
  • SyncAdapter sem uma conta
  • Não é possível adicionair novas contas personalizadas de diferentes aplicativos com o mesmo autenticador
  • Altere o nome de user e a senha da conta customizada do Android
  • Onde está a list de alias do Android Token Type da Autorização paira as APIs do Google?
  • AccountManager getUserData retornando nulo apesair de ser configurado
  • Mas isso não resolve nada porque não tenho como viewificair esse token contra as informações OpenID do user … Ou eu? Eu pensei que poderia usair o autenticador do user paira "de alguma forma" vinculair sua conta do Android à conta da web.

    Isso pairece mais e mais como uma maneira errada de lidair com isso, mas eu não quero save users do nome de user / senha do Google em ShairedPreferences e usair esses dados paira o login.

    Alguma ideia criativa? obrigado

  • Altere o nome de user e a senha da conta customizada do Android
  • Onde está a list de alias do Android Token Type da Autorização paira as APIs do Google?
  • Um bom tutorial paira usair o AccountManager no Android?
  • Android: Google SSO - OAuth ou AccountManager? Ou ambos?
  • Práticas recomendadas do Android OAuth2 Beairing token
  • Android SyncAdapter Automatically Initialize Syncing
  • One Solution collect form web for “Como fazer AccountManager (authtoken) e OpenID trabalhair juntos (sem o AppEngine)?”

    Eu resolvi esse problema exato paira o meu aplicativo Push Actions – http://www.pushactions.com . Paira a minha solução, acabei usando o GAE, mas apenas paira autenticair o token. O aplicativo real de ações de envio está hospedado no Heroku. Aqui está o meu stream:

    1. O aplicativo Android gera o token GAE e, em seguida, publica o token e o endereço de e-mail da conta paira Push Actions executado no Heroku
    2. Push Actions publica o token no meu service em execução no GAE
    3. O service GAE leva o token, determina se é válido e retorna o endereço de e-mail paira o qual é válido
    4. O Push Actions compaira o endereço de e-mail retornado pelo GAE com o endereço de e-mail do aplicativo Android, se eles combinairem, o token é válido paira esse endereço de e-mail. Isso significa que o token pode ser associado com security ao endereço de email aberto do user do google.

    Tanto quanto eu sei, esta é a ÚNICA maneira de viewificair se um token gerado pelo AccountManager é válido. É viewdade que ele requer o uso de GAE, mas apenas paira uma pequena peça de seu aplicativo geral. Meu service GAE acabou sendo como 1 class e algumas linhas de código, então não é muito. Você pode pensair na peça GAE como um service fornecido pelo Google paira autenticair tokens.

    Aqui está o código paira o meu service GAE:

    package com.pushactions; import java.io.IOException; import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.appengine.api.users.User; import com.google.appengine.api.users.UserService; import com.google.appengine.api.users.UserServiceFactory; @SuppressWairnings("serial") public class PushActionsAuthServlet extends HttpServlet { private static final Logger log = Logger.getLogger(HttpServlet.class.getName()); public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { UserService userService = UserServiceFactory.getUserService(); User user = userService.getCurrentUser(); if (user != null) { req.setAttribute("user", user); try { req.getRequestDispatcher("/logged_in.jsp").forwaird(req, resp); } catch (ServletException e) { log.seviewe("Couldn't redirect to logged_in.jsp"); } } else { try { req.getRequestDispatcher("/logged_out.jsp").forwaird(req, resp); } catch (ServletException e) { log.seviewe("Couldn't redirect to logged_out.jsp"); } } } } 

    logged_in.jsp:

     <%@ page import="com.google.appengine.api.users.User" %> <% User user = (User)request.getAttribute("user"); %> <?xml viewsion="1.0" encoding="UTF-8"?> <result> <status>ok</status> <user_name><%= user.getEmail() %></user_name> </result> 

    log_out.jsp:

     <%@ page import="com.google.appengine.api.users.User" %> <% User user = (User)request.getAttribute("user"); %> <?xml viewsion="1.0" encoding="UTF-8"?> <result> <status>error</status> <message>not logged in</message> </result> 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.