首先我不知道这篇文章发到Android开发板块是否适合的,因为只部分内容大多数是有关Google appEngine的,但因为这是AppEngine和Android的配合开发,故对Android开发者也有一定的参考意义,故发到这里来了。

其次,在写文章前先谢谢UCWeb Android的产品经理huang,谢谢他的赏识,虽然最后因为一些个人原因我没留在UC,但从笔试和面试的过程中,我发觉UC真是一家严谨、惜才的公司,搞Android的朋友如果有兴趣,可以考虑应聘一下UC的社招。


OK,进入正题!

在做游戏开发的时候,很多游戏都会提供一个全球分数排名的的功能,这就需要使用服务器了,当然,你可以选择搭建自己的服务器,但从成本,稳定性和开发周期上看,我认为Google AppEngine是个很不错的选择,现在Google AppEngine关于Python的参考资料比较详尽,Java的就比较少,所以我把我写的小Demo放上来,做抛砖引玉之用,因为我也是初学者,所以demo一切从简,大侠请不要见笑哦!

 

Demo1:对象的存储:

 

步骤1.定义JavaBean:

 


1. package
2.   
3. import
4. import
5. import
6. import
7. import
8. import
9.   
10. //标记对象可以持久化
11. @PersistenceCapable(identityType = IdentityType.APPLICATION)  
12. public class
13.   
14. //标记主键,作以后查询之用
15. @PrimaryKey
16. @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)  
17. private
18.       
19. @Persistent
20. private
21.       
22. @Persistent
23. private
24.       
25. public
26. this.firstName = firstName;  
27. this.lastName = lastName;  
28. this.birthDate = birthDate;  
29.     }  
30.   
31. public
32. return
33.     }     
34. }


 

 步骤2.存取Bean(可以写在Servlet的doGet()或者doPost()里面):

 



1. package
2.   
3. import
4. import
5. import
6. import
7. import
8. import
9. import
10.   
11. @SuppressWarnings("serial")  
12. public class HelloServlet extends
13. public void
14. throws
15.           
16. "text/plain");  
17.           
18. new Employee("Alfred", "Smith", new
19. //获取用以存取对象的PersistenceManager
20.         PersistenceManager pm = PMF.get().getPersistenceManager();  
21.       
22. try
23. //存储对象
24. "saving object!");  
25.             pm.makePersistent(e);       
26. catch(Exception ex){  
27. "cannot persistent!");  
28.             ex.printStackTrace();     
29.         }   
30. finally
31.             pm.close();  
32.         }  
33.           
34. try{  
35. //再次获取用以存取对象的PersistenceManager
36.             pm = PMF.get().getPersistenceManager();  
37. //由主键检索对象,Alfred之前被定义为主键的
38. class, "Alfred");  
39. //读取新对象的信息检测对象检索是否成功
40. "Employee:"+newE.getFirstName());  
41. catch(Exception ex){  
42.             ex.printStackTrace();  
43. "cannot get data!");  
44.             pm.close();  
45.         }  
46.     }  
47.   
48. @Override
49. protected void
50. throws
51. this.doGet(req, resp);  
52.     }  
53. }


 

 其中PMF类的代码如下,没看错应该是个单例模式:

 



1. package
2.   
3. import
4. import
5.   
6. public final class
7. private static final
8. "transactions-optional");  
9.   
10. private
11.   
12. public static
13. return
14.     }  
15. }


 

 Demo2.使用Google 账户认证服务:

 




    1. package
    2.   
    3. import
    4.   
    5. import
    6. import
    7. import
    8. import
    9.   
    10. import
    11. import
    12.   
    13. public class GoogleAccount extends
    14.   
    15. @Override
    16. protected void
    17. throws
    18. //创建用户服务
    19.         UserService userService = UserServiceFactory.getUserService();  
    20.           
    21.         String thisURL = req.getRequestURI();  
    22. //通过请求对象的 getUserPrincipal() 方法测试用户是否使用 Google 帐户登录
    23. if (req.getUserPrincipal() != null) {  
    24. //如果有登录,则创建Login地址
    25. "<p>Hello, "
    26.                                          req.getUserPrincipal().getName() +  
    27. "!  You can <a href=\""
    28.                                          userService.createLogoutURL(thisURL) +  
    29. "\">sign out</a>.</p>");  
    30. else
    31. //如果没有登录,则创建Login地址
    32. "<p>Please <a href=\""
    33.                                          userService.createLoginURL(thisURL) +  
    34. "\">sign in</a>.</p>");  
    35.         }  
    36.     }  
    37.   
    38. @Override
    39. protected void
    40. throws
    41.         doGet(req, resp);  
    42.     }     
    43. }



     

     手机访问登录效果:

    Android常用的服务器 android手机 服务器_android

     

    需要特别指出的是,Google通过在web.xml里面配置权限来区分登录者的权限,可以用下面的代码来配置安全常量从而划定只能由admin访问的区域---admin路径下的所有页面:

     




      1. <security-constraint>
      2. <web-resource-collection>
      3. <url-pattern>/admin/*</url-pattern>
      4. </web-resource-collection>
      5. <auth-constraint>
      6. <role-name>admin</role-name>
      7. </auth-constraint>
      8. </security-constraint>



       参考资料:

      http://code.google.com/intl/zh-CN/appengine/docs/java/overview.html