当前访客身份:游客 [ 登录 | 加入开源中国 ]

代码分享

当前位置:
代码分享 » Java  » 手机App开发
logan676

微博客户端

logan676 发布于 2013年01月17日 11时, 18评/19228阅
分享到: 
收藏 +0
3

1.授权认证:Oauth2.0认证流程

2.服务器访问操作流程

3.新浪微博SDK和腾讯微博SDK

4.HMAC加密算法

5.SQLite数据库相关操作

6.字符串处理,表情识别

7.JSON解析,XML解析:超链接解析,时间解析等

8.Android UI:样式文件,布局

9.异步加载图片,异步处理数据,多线程

10.界面设计:背景图、按钮、进度条、提示框

android应用市场链接
http://www.mumayi.com/android-275488.html

项目主页

https://github.com/Logan676/Weibo_v2

开发群:232482105

代码片段(2) [全屏查看所有代码]

1. [文件] JustShare_v2.1.apk ~ 2MB     下载(1370)     [全屏预览]

2. [代码][Java]代码     跳至 [2] [全屏预览]

/**   
 * Copyright (c) 2013 by Logan.	
 *   
 * 爱分享-微博客户端,是一款运行在android手机上的开源应用,代码和文档已托管在GitHub上,欢迎爱好者加入
 * 1.授权认证:Oauth2.0认证流程
 * 2.服务器访问操作流程
 * 3.新浪微博SDK和腾讯微博SDK
 * 4.HMAC加密算法
 * 5.SQLite数据库相关操作
 * 6.字符串处理,表情识别
 * 7.JSON解析,XML解析:超链接解析,时间解析等
 * 8.Android UI:样式文件,布局
 * 9.异步加载图片,异步处理数据,多线程  
 * 10.第三方开源框架和插件
 *    
 */
package com.logan.weibo.ui;

import java.io.IOException;

import org.json.JSONObject;

import android.content.Intent;
import android.graphics.Bitmap;
import android.net.http.SslError;
import android.os.Bundle;
import android.util.Log;
import android.view.ViewGroup.LayoutParams;
import android.webkit.SslErrorHandler;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;

import com.logan.weibo.bean.Account;
import com.logan.weibo.bean.BaseActivity;
import com.tencent.weibo.oauthv2.OAuthV2;
import com.tencent.weibo.oauthv2.OAuthV2Client;
import com.weibo.net.WeiboException;
/**
 * 腾讯微博授权认证类
 * @author Tencent
 *   
 * @version 1.0 
 *  
 */
public class QAuthorizeActivity extends BaseActivity {
	private final String TAG = "QAuthorizeActivity";
	// !!!请根据您的实际情况修改!!! 认证成功后浏览器会被重定向到这个url中 必须与注册时填写的一致
	//private String redirectUri = "http://blog.csdn.net/logan676";
	// !!!请根据您的实际情况修改!!! 换为您为自己的应用申请到的APP KEY
	//private String clientId = "801218195";
	//!!!请根据您的实际情况修改!!! 换为您为自己的应用申请到的APP SECRET
	//private String clientSecret = "897a59f506ef91de34e8cec2d0ff90d0";

	
	private String head = "";
	private String name = "";
	/**
	 * 
	 * @param openid
	 * @param openkey
	 * @param name
	 * @param url
	 * @param accessToken
	 * @param expires_in
	 * @param plf
	 */
	public void addTencentAccount(String openid, String openkey, String name,
			String url, String accessToken, String expires_in, String plf) {
		Account account = new Account(openid, openkey, name, url, accessToken,
				expires_in, plf);
		mDBManager.addTencent(account);
	}

	public Boolean getData() {
		
		try {
			// 调用QWeiboSDK获取用户信息
			String userData = userAPI.info(oAuth, "json");
			JSONObject js = new JSONObject(userData);
			if (!js.isNull("data")) {
				JSONObject info=js.getJSONObject("data");
				name = info.getString("name");
				head = info.getString("head");
				return true;
			} else
				return false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Log.v(TAG, "getData Error");
			return false;
		}

	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		oAuth = new OAuthV2(TENCENT_REDIRECT_URL);
		oAuth.setClientId(CLIENT_ID);
		oAuth.setClientSecret(CLIENT_SECRET);
		// 关闭OAuthV2Client中的默认开启的QHttpClient。
		OAuthV2Client.getQHttpClient().shutdownConnection();
		LinearLayout linearLayout = new LinearLayout(this);
		WebView webView = new WebView(this);
		linearLayout.addView(webView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
		setContentView(linearLayout);
		String urlStr = OAuthV2Client.generateImplicitGrantUrl(oAuth);// 使用Implicit
																		// grant方式鉴权时,合成转向授权页面的url

		WebSettings webSettings = webView.getSettings();
		webSettings.setJavaScriptEnabled(true);
		webSettings.setSupportZoom(true);
		webView.requestFocus();
		webView.loadUrl(urlStr);
		System.out.println(urlStr.toString());
		Log.i(TAG, "WebView Starting....");
		WebViewClient client = new WebViewClient() {
			/**
			 * 回调方法,当页面开始加载时执行
			 */
			@Override
			public void onPageStarted(WebView view, String url, Bitmap favicon) {
				Log.i(TAG, "WebView onPageStarted...");
				Log.i(TAG, "URL = " + url);
				if (url.indexOf("access_token=") != -1) {
					int start = url.indexOf("access_token=");
					String responseData = url.substring(start);
					// 得到服务器返回的包含access
					// token等的回应包后,解析存储到OAuth类中
					OAuthV2Client .parseAccessTokenAndOpenId(responseData, BaseActivity.getInstance());

					view.destroyDrawingCache();
					view.destroy();
					if (getData()) {
						addTencentAccount(oAuth.getOpenid(), oAuth.getOpenkey(), name,head, oAuth.getAccessToken(),oAuth.getExpiresIn(), "tencent");
						Log.i(TAG, "cccessToken:"+ oAuth.getAccessToken());
					} else
						finish();

					Intent intent = new Intent();
					intent.setClass(QAuthorizeActivity.this,
							AccountActivity.class);
					startActivity(intent);
					finish();

				}
				super.onPageStarted(view, url, favicon);

			}

			/*
			 * TODO Android2.2及以上版本才能使用该方法
			 * 目前https://open.t.qq.com中存在http资源会引起sslerror,待网站修正后可去掉该方法
			 */
			@Override
			public void onReceivedSslError(WebView view,
					SslErrorHandler handler, SslError error) {
				if ((null != view.getUrl())
						&& (view.getUrl().startsWith("https://open.t.qq.com"))) {
					handler.proceed();// 接受证书
				} else {
					handler.cancel(); // 默认的处理方式,WebView变成空白页
				}
				// handleMessage(Message msg); 其他处理
			}
		};
		webView.setWebViewClient(client);
	}

	@Override
	public int getLayout() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void onComplete(String response) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void onIOException(IOException e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void onError(WeiboException e) {
		// TODO Auto-generated method stub
		
	}

}


开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(18)

  • 1楼:何志敏 发表于 2013-01-24 16:32 回复此评论
    好贴 ,顶了 
  • 2楼:enel_guo 发表于 2013-01-31 17:54 回复此评论
    github 链接失效了~~
  • 3楼:logan676 发表于 2013-02-20 15:40 回复此评论

    引用来自“enel_guo”的评论

    github 链接失效了~~
    已经修改
  • 4楼:菜鸟求知 发表于 2013-05-10 23:58 回复此评论
    学习了
  • 5楼:科比123 发表于 2013-05-17 12:33 回复此评论
    github 链接失效了~~
  • 6楼:wsf0123 发表于 2013-05-17 16:42 回复此评论
    github 链接失效
  • 7楼:logan676 发表于 2013-05-28 20:49 回复此评论

    引用来自“wsf0123”的评论

    github 链接失效
    https://github.com/Logan676/JustShare
  • 8楼:logan676 发表于 2013-05-28 20:49 回复此评论

    引用来自“科比123”的评论

    github 链接失效了~~
    请使用这个链接:https://github.com/Logan676/JustShare
  • 9楼:CulmJoker 发表于 2013-07-25 17:30 回复此评论
    不忍直视的ui
  • 10楼:敲代码猥琐男 发表于 2013-10-27 13:56 回复此评论
    貌似是缺少东西的,缺少library,为方便大家使用这个开源的微博客户端,我附加点信息

    library下载地址:    http://code.google.com/p/android-weibo-sdk/downloads/list

    另外这个项目不要从github上下载,是有问题的一个版本,从下面这个地方下载
    https://code.google.com/p/weibo4pansoft/source/checkou

    good luck


  • 11楼:LeeDangX 发表于 2013-12-10 14:18 回复此评论
    好贴,支持一下。分享安卓办公软件: www.haobitou.com/#01
  • 12楼:竹林贤子 发表于 2014-01-25 16:53 回复此评论
    问下,认证的话需要key和secret都是明文在程序中显示,如果要是自己的程序上线的话,怎么保证这些数据不会完全暴露在程序中?防止反编译查看自己的数据?
  • 13楼:wufeng0927 发表于 2014-01-26 17:34 回复此评论

    引用来自“竹林贤子”的评论

    问下,认证的话需要key和secret都是明文在程序中显示,如果要是自己的程序上线的话,怎么保证这些数据不会完全暴露在程序中?防止反编译查看自己的数据?
    我现在做的是在初始化时候有一次网络请求,通过请求来拿到值,之后再授权。
  • 14楼:木林木 发表于 2014-03-28 14:04 回复此评论
    框架volley 不错 楼主可以用用、
  • 15楼:devstore 发表于 2014-04-26 09:33 回复此评论
    十万悬赏评测,大奖等你来拿。DevStore等待开发者的到来。devstore。cn
  • 16楼:logan676 发表于 2014-07-19 00:18 回复此评论

    引用来自“四少”的评论

    貌似是缺少东西的,缺少library,为方便大家使用这个开源的微博客户端,我附加点信息

    library下载地址:    http://code.google.com/p/android-weibo-sdk/downloads/list

    另外这个项目不要从github上下载,是有问题的一个版本,从下面这个地方下载
    https://code.google.com/p/weibo4pansoft/source/checkou

    good luck


    为了方便大家下载,编译和二次开发,我在Github重新发布了新版本,https://github.com/Logan676/Weibo_v2,里面详细介绍了如何下载和引用外部library,还有一些开发文档和所用到的框架
  • 17楼:logan676 发表于 2014-07-19 00:20 回复此评论

    引用来自“竹林贤子”的评论

    问下,认证的话需要key和secret都是明文在程序中显示,如果要是自己的程序上线的话,怎么保证这些数据不会完全暴露在程序中?防止反编译查看自己的数据?
    程序上线之前可以做反编译操作,这样即便别人拿到你的APK反编译得到的也是乱码,无法还原你的Key和secret的。
  • 18楼: 发表于 2015-06-03 22:28 回复此评论
     1元4700套安卓源码  新店开张

    http://weidian.com/i/1411913192?wfr=c

    进去联系卖家(我) 你想怎样就怎样!!!