Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 474|回复: 0

开发交流:基于Android平台淘宝客户端开发之登陆

[复制链接]

该用户从未签到

发表于 2011-10-24 10:08:23 | 显示全部楼层 |阅读模式
基于Android平台淘宝客户端开发之登陆
这篇文章转自百度日志,链接在下面的参考中,是我无意间发现的,拿过来和大家共享。我特别喜欢淘宝公司,喜欢他们的文化,工作环境,我明天也要参加淘宝公司2012年校招的笔试了,很紧张,很激动,我准备了几个月了,就是为的这一天。我最近一阵都没来论坛发帖,其实我一直在研究淘宝无线开放平台方面的东西,遇到了一点棘手的问题,总算在笔试前搞定了,无比开心,把成果拿出来和大家分享,希望大家多多学习,多多思考。


说些题外话,各个公司的客户端(我指的是Android客户端),大部分都是在登录的时候就要你输入用户名和密码,或者是第三方的应用,在刚进入的时候,都要你进行授权,其实,我想了想,这样会有不好的用户体验,用户可能来只是看看,只是看看而已,为什么在看看之前就要输入用户名和密码呢?如果用户没有注册呢,只是来看看呢?这样,这个用户可能会选择注册,可能就离开了,反正我是特别反感注册。这样的结果就会造成很多用户流失,如果在开始不让用户注册就能浏览一些信息,只有在用户产生了兴趣,并准备继续操作的时候,才让用户授权,这样是不是高好呢?当然,只是自己突发其然的想法,不一定对。


继续看下面之前的说明:
淘宝无线品平台并没有提供官方的SDK,看来淘宝公司还不是很重视无线平台这一块,我倒是觉得,在未来,无线平台才有更多的机会和潜力。淘宝无线平台的SDK是一个第三方公司:诚迈科技提供的,但是我问过无线平台的负责技术的人员了,他说,他们公司现在已经停止了这个项目,就是说以后,诚迈科技为淘宝无线平台提供的SDK以后不会更新了。我倒是觉得,不更新更好,这样可以有很多网友去写,写的会更好。他们的文档写的不好,我也用过他们提供的SDK,很不爽,其实他们SDK的架构设计,我感觉非常棒,但是他们的文档写的不是很好。使用的时候会有很多问题和疑惑。为此,我还是自己写了登陆和使用API的示例代码,在这期间,遇到了很多问题,最大的问题就是前面的问题,淘宝的无线文档写的,怎么说呢,不是特别好,可能我是新手吧,开始的时候,总是看不懂。但是现在懂了之后发现,他们的文档写的还是很精简的,还是不错的,没有那么多废话。过几天,我会把我自己封装的登陆和使用淘宝API的示例代码发上来,大家学习,免得和我一样,在这浪费过多的时间,没有用。下面的说明都是使用诚迈科技提供的SDK,大家仍然可以去淘宝开放平台上下载,现在还是可以使用的。
1.啰嗦的理论写在前面
在人们的印象中,各种社交网站的客户端都把登陆作为第一步,但对于淘宝客户端,我们没有必要这样做。这是由于,好多懒人们懒得登陆或注册,因此就不用你的客户端了,直接影响将近三分之一的网站流量啊(这是看官方论坛中有人统计的)。因此我们在不得不登陆的时候再设置登陆这步,而不是放在客户端的开始。
2.进行登陆的过程
淘宝的登陆为了安全起见,规定以内嵌wap页的形式网页登陆,因此登陆这步我们就没必要纠结于界面设计了,直接放一个WebView就OK了(url用Mars.jar包中的MtopLogin类的getLoginUrl()方法得到)。在页面中实现登陆、授权后,MtopLogin类可以getTopSession(),这个参数在后续的得到用户、进行买卖中将用到。
3.实现该过程:
(下载mars.alpha-v0.6     http://www.archermind.com/mtop )
(1)新建android工程,在工程中导入mars.jar包(mars.alpha-v0.6\sdk\marr.jar)
(2)AndroidManifest.xml  中增加internet访问权和手机硬件访问权
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
(3)建res\layout\login.xml  将一个webview、一个按钮、一个textview拖到一个LinearLayout中。
login.xml代码:
Xml代码
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout      xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      androidrientation="vertical">     
<WebView            android:id="@+id/wv1" android:layout_width="match_parent" android:layout_height="187dp">      </WebView>   
  <Button android:text="获得用户信息" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>   
<TextView android:text="TextView" android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="match_parent"></TextView
</LinearLayout>  
(4)主要java代码:
获取web的url方法:
Java代码
mWebView = (WebView) findViewById(R.id.webview);   // get WebSetting object,设置支持Javascript的参数  
mWebView.getSettings().setJavaScriptEnabled(true);   // 页面缩放设置  
mWebView.getSettings().setBuiltInZoomControls(true);   // 使页面获得焦点
mWebView.requestFocus();     
String mtopUrl = "http://api.m.taobao.com/rest/api2.do";  
String v = "";   
String appKey = "12311413";// 你的应用所申请的appkey和secret  
String secret = "48d7e406fadaf1b1f7abb32a95a71c33";  
ttid = "";   
v = "androidClient";  
mtopLogin = new MtopLogin(mtopUrl, v, imei, imsi, appKey, secret, ttid);  
try {      
try {         
  mWebView.loadUrl(mtopLogin.getLoginUrl());   
   } catch (ApiException e) {         
   e.printStackTrace();     
  }  
} catch (JSONException e) {     
  mWebView.loadUrl("http://www.baidu.com");   
}   
  /* response WebView event */
mWebView.setWebViewClient(
new WebViewClient() {     
  public boolean shouldOverrideUrlLoading(WebView view, String url) {        
   view.loadUrl(url);        
   return true;     
  }   });  
button的onclick事件:
Java代码
@Override
         public void onClick(View v) {
               try {                  
try {
                      mtopLogin.getUserSessionKey();
                  } catch (ApiException e) {
                       e.printStackTrace();
                  }
                   mtopLogin.getTopsession();
               } catch (JSONException e1) {
                     e1.printStackTrace();
               }
                OpenServiceClient.init("http://gw.api.taobao.com/router/rest",    appKey, secret, getApplicationContext(), "", imei, imsi);//必须有这步才能调用UserDomainApi的方法
               try {
                    User user = UserDomainApi.getUser("nick", "",  mtopLogin.getTopsession());
//通过session获得user信息具体见doc中的文档
                  text.setText(user.getNick() + user.getCreated());
               } catch (ApiException e) {
                  text.setText("获取失败!");  
             }
          }  
(5)注意事项,获取imei,imsi的参数在虚拟机与在真机中不同。
在真机测试中用:
Java代码
TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
      String imei =  telephonyManager.getDeviceId();
      String imsi = telephonyManager.getSubscriberId();  
来获取。
虚拟机中这么获取会报错的。
虚拟机中使用:
Java代码
String imei = "89014103211118510720";//瞎编就行~~~~(>_<)~~~~   
String imsi = "310260000000000";//瞎编就行O(∩_∩)O  
(6)测试说明:
运行应用后,在webview中登陆并实现授权,然后点击按钮“获取用户信息”即可得到登陆的用户名,证明登陆成功。
其实在执行 mtopLogin.getUserSessionKey();后已经登陆成功获取到了其他操作所需的session,token等。


参考:
1.    http://hi.baidu.com/lynn_wong/blog/item/da5322c31a4f962ee5dd3b29.html
2.我的联系方式:shc111@yahoo.cn
回复

使用道具 举报

该用户从未签到

发表于 2011-10-24 10:08:26 | 显示全部楼层

Re:开发交

加油,你肯定行的!!!!!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 10:08:29 | 显示全部楼层

Re:开发交

加油哈,之前在群里听说你要去百度的....现在改去淘宝了??
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 10:08:32 | 显示全部楼层

Re:开发交

百度的笔试在10月后呢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 01:33 , Processed in 0.369072 second(s), 47 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表