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入门到精通教程
查看: 560|回复: 0

开发交流:android平台下,淘宝客户端开发之——登陆

[复制链接]

该用户从未签到

发表于 2011-10-24 10:47:10 | 显示全部楼层 |阅读模式
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";
复制代码

(6)测试说明:
运行应用后,在webview中登陆并实现授权,然后点击按钮“获取用户信息”即可得到登陆的用户名,证明登陆成功。
其实在执行 mtopLogin.getUserSessionKey();后已经登陆成功获取到了其他操作所需的session,token等。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 07:37 , Processed in 0.368544 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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