本文原创http://blog.csdn.net/yanbin1079415046,转载请注明出处。

从事android工作也有段时间了,碍于肚子里料不多,一直也没写过什么东西。最近刚好项目中要接入新浪微博,就顺便研究了一下android客户端接入腾讯微博和人人网。由于是第一次写东西,加上本人小菜鸟一个,请高手勿喷,觉得文章没用的飘过,当然啦,觉得还有点用的就看看吧。好了,废话不多说了,进入我们的正题吧。

一:这是个什么东西?

说白了,接入微博就是让你的应用程序可以调用新浪微博,腾讯微博和人人网的api,实现微博发送,分享给好友等等的功能啦。当然也可以实现让你的客户端使用微博账号进行登录。我们这篇文章要讲的就是访问这些社交平台提供的api的时候比较关键的一步,获取调用api接口的token,token可以理解为我们的客户端程序与社交平台api交互的令牌。

二:官方教程在哪里?

学习东西,当然是官方的东西最好了。下面我们就简单说说接入新浪,腾讯微博以及人人网的官方教程吧。同学们也可以自行去看官方的教程,那么我下面写的东西就可以忽略不计了。

新浪微博 api:http://open.weibo.com/wiki/%E9%A6%96%E9%A1%B5

首先,当然你得有一个新浪微博的账号啦。然后就是注册应用啊等等一代堆东西,自己去 开发指南--新手引导 中看吧。然后,就要填写我们的信息了。这里要注意授权页的填写,在 我的应用--应用信息--高级信息--授权回调页 这里,如下图1。最后,就是如何对我们的客户端程序进行授权了。新浪微博的授权机制说明如下:大部分API的访问如发表微博、获取私信,关注都需要用户身份。目前新浪微博开放平台用户身份鉴权有OAuth2.0和Basic Auth(仅用于应用所属开发者调试接口)两种方式。我们这里采用的是OAuth2.0的授权机制。

如何获取token,我们将在下面的文章中结合代码进行讲解。

图1 设置授权回调页

腾讯微博   api:http://dev.t.qq.com/

腾讯微博的应用申请和新浪微博的类似,它也有一个授权回调页。不过它不是这个名字,它的名字是:应用网址。为简单起见,我们这里也使用默认的地址,即:http://www.tencent.com/zh-cn/index.shtml 其他的和腾讯微博差不多,就不赘述了。腾讯微博提供了OAuth 1.0a,OAuth2.0和OpenId&OpenKey授权方式,本人中采用的是OAuth2.0授权方式,其他的方式同学们自行研究。

人人网        api:http://dev.renren.com/    人人网使用OAuth 2.0作为验证与授权协议。

2012.10月编辑:

人人网目前有一个移动开发者平台,专门为移动应用和HTML5应用提供更简洁的授权接口,简单易用,称为人人移动开发者中心。地址如下:

http://dev.mobile.renren.com/home/show

三:关于OAuth2.0

本人比较懒,就不把概念贴在这里了。自己百度去吧,百度百科中有这样的一句概括:OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。这里我们稍微说一下OAuth2.0的认证流程。文章请看这里:http://blog.unvs.cn/archives/oauth-qq2.0-developer.html。首先感谢这位哥们,然后不想点开链接的同学就直接看下面的吧。

在OAuth2.0的处理流程,主要分为以下四个步骤:

1、得到授权码code
2、获取access token

3、通过access token,获取OpenID
4、通过access token及OpenID调用API,获取用户授权信息
上面是流程的大概四个步骤,在下面的流程示意图中会得到体现,这是我制作的一个幻灯片的流程图(文章最后会附上制作的OAuth幻灯片分享给大家),这里就直接截图下来进行讲解:
图2 OAuth2.0 认证流程

第一步:首先直接跳转至用户授权地址,即图示 Request User Url ,提示用户进行登录,并给予相关资源授权,得到唯一的Auth code,这里注意的是code只有10分钟的有效期,对于安全考虑,相对于OAuth1.0省了一步获取临时的Token,并且有效期也进行了控制,比1.0认证简化了很多,并安全一些;
第二步:得到授权code后,这一步就是请求access token,通过 图示 Request access url ,生成得到数据Token;
第三步:通过Access Token请求OpenID,openid是用户在此平台的唯一标识,通过 图示 Request info url 请求,然后得到OpenID;
第四步:通过第二步得到的数据Token、第三步得到的OpenID及相关API,进行请求,获取用户授权资源信息。(我喜欢简洁明了,OAuth2.0认证流程就是这样,相信通过图示及讲解都能明白,若有不明白之处请留言)

四:让你的应用程序访问社交平台api(获取token)。注意要加相应的权限,文章后面会贴出清单文件中所需的权限。

新浪微博授权:

详细内容请参见新浪微博SDK中自带的文档:Android平台微博SDK说明文档.docx。它在SDK的工程目录下, 所以你要导入SDK工程的时候主要把它去了。由于新浪微博给我们提供的SDK是以工程的方式给出的,所以我们需要引用它的工程才可以使用它提供的api。当然啦,这样放到实际环境中是不行的。所以我们可以将SDK下的相关文件拷贝到我们的自己的工程目录下即可,注意修改相应的东西。本人是这样做的,不知道还有没有更好的方式。具体的请看文章后面给出的demo。值得一提的是,人人网也是以这种方式提供SDK的,但是腾讯微博给我们提供的是JAR,这个看起来就简洁多了。这里顺便说一下覆盖的方法吧,就是将新浪微博给我们提供的SDK工程文件下的src和res文件夹拷贝到你自己的工程中覆盖原有的文件即可。

环境准备好了,我们就可以开始进行代码的编写了。还是那句话,有官方教程在呢,同学们可以对着教程来练习,我下面只是结合代码简单的说一下。

[java] view plaincopy
  1. //sina   CONSUMER_KEY、CONSUMER_SECRET替换成你自己应用的key和secret
  2. private static final String CONSUMER_KEY = "913917729";
  3. private static final String CONSUMER_SECRET = "32c47f37e4727ce9c0db1ceee12bf765";
  4. private String redirectUriSina="http://www.sina.com"; //授权回调页    与 我的应用--应用信息--高级信息 中一致
  5. OAuthV2 authV2 = null;//腾讯微博Oauth
  6. Renren renren = null;//renren
  7. File file = null;
  8. String basepath = "";
  9. //tencent CLINETID、CLIENTSECRET替换成你自己应用的key和secret
  10. private static final String CLINETID = "801208558";
  11. private static final String CLIENTSECRET = "da6d09bb537559c37cb36561fd825346";
  12. //认证成功后浏览器会被重定向到这个url中  必须与注册时填写的一致
  13. private String redirectUriTen="http://www.tencent.com/zh-cn/index.shtml";
  14. //renren API_KEY、SECRET_KEY替换成你自己应用的key和secret
  15. private static final String API_KEY = "b6f9602ab3714023b794d34b51639a99";
  16. private static final String SECRET_KEY = "f51ce08118014784a0579ba88730b6bd";
  17. private static final String APP_ID = "206681";//人人网还需要app_id
  18. private static final int RENREN_REQUEST_CODE = 123;
  19. String accessToken;
[java] view plaincopy
  1. //新浪微博认证
  2. Weibo weibo = Weibo.getInstance();
  3. if(!isOauthSina(weibo)){
  4. weibo.setupConsumerConfig(CONSUMER_KEY, CONSUMER_SECRET);//设置你的key和secret
  5. weibo.setRedirectUrl(redirectUriSina);
  6. weibo.authorize(this, new OauthDialogListener());
  7. }else{
  8. tv.setText("access_token : " + accessToken);
  9. Toast.makeText(getApplicationContext(), "该用户已经授权", Toast.LENGTH_SHORT).show();
  10. Intent intent = new Intent();
  11. intent.putExtra("accessToken", accessToken);
  12. intent.putExtra("flag", MyContent.SINA);
  13. intent.setClass(InsertWeiboActivity.this, TestActivity.class);
  14. startActivity(intent);
  15. }

isOauthSina方法如下,它的作用是判断用户是否已经对我们的应用进行了授权。

[java] view plaincopy
  1. /**
  2. * 新浪微博 用户是否已经授权
  3. * @param weibo
  4. * @return
  5. */
  6. private boolean isOauthSina(Weibo weibo){
  7. boolean b = false;
  8. accessToken = getSharedPreferences("token", Context.MODE_PRIVATE).getString("access_token", "");
  9. if(weibo != null && !accessToken.equals("")){
  10. b = true;
  11. }
  12. return b;
  13. }

上面的两段代码中, 值得注意的地方是redirectUriSina,它是一个String类型的参数,值就是我们在之前提到过得那个授权回调页的地址。接着新浪微博将弹出一个授权页面的对话框,供用户输入用户名和密码(此处就不截图,自己跑demo看吧)。在用户输入用户名和密码之后,它将被我们的OauthDialogListener类监听到,它的实现如下:

[java] view plaincopy
  1. /**
  2. * 弹出新浪微博的授权页面
  3. * @author yanbin
  4. *
  5. */
  6. private class OauthDialogListener implements WeiboDialogListener{
  7. @Override
  8. public void onComplete(Bundle values) {
  9. String token = values.getString("access_token");
  10. String expires_in = values.getString("expires_in");
  11. tv.setText("access_token : " + token + "  expires_in: "
  12. + expires_in);
  13. AccessToken accessToken = new AccessToken(token, CONSUMER_SECRET);
  14. SharedPreferences sf = getSharedPreferences("token", Context.MODE_PRIVATE);
  15. sf.edit().putString("access_token", accessToken != null ? accessToken.getToken() : "")
  16. .commit();
  17. //          accessToken.setExpiresIn(expires_in);
  18. //          Weibo.getInstance().setAccessToken(accessToken);
  19. Intent intent = new Intent();
  20. intent.putExtra("accessToken",accessToken.getToken());
  21. intent.putExtra("flag", MyContent.SINA);
  22. intent.setClass(InsertWeiboActivity.this, TestActivity.class);
  23. startActivity(intent);
  24. }
  25. @Override
  26. public void onWeiboException(WeiboException e) {
  27. //未作处理
  28. }
  29. @Override
  30. public void onError(DialogError e) {
  31. //未作处理
  32. }
  33. @Override
  34. public void onCancel() {
  35. Toast.makeText(InsertWeiboActivity.this, "您已经取消授权", 1).show();
  36. }
  37. }

WeiboDialogListener中有一个回调方法,它会在用户输入正确的用户名和密码之后返回给我们的客户端程序获取新浪微博提供的api的令牌(这个东西很重要的,你调用新浪微博api的时候每次都必须把它带上)。接下来的工作就是保存此token供下次使用了。这里我们存储在SharedPreference中。至此,我们就获取了新浪微博的token,接下来就可以操作新浪微博api了,比如发布一条微博,可以试试哦。

 腾讯微博授权:  

腾讯微博授权的官方实例请看这里,http://wiki.open.t.qq.com/index.php/%E7%A7%BB%E5%8A%A8%E5%BA%94%E7%94%A8%E6%8E%A5%E5%85%A5/Android_SDK_V1.2。下面我们结合代码说说我们的实现。  首先第一步就是得到腾讯给我们提供的授权回调页,代码如下,由于要弹出OAuthV2AuthorizeWebView这个页面,所以要在清单文件中声明。

[java] view plaincopy
  1. //判断用户是否已经授权
  2. if(!isOauchTen()){
  3. //使用回调url来创建授权页面
  4. authV2 = new OAuthV2(redirectUriTen);
  5. authV2.setClientId(CLINETID);
  6. authV2.setClientSecret(CLIENTSECRET);
  7. //关闭OAuthV2Client中的默认开启的QHttpClient。
  8. OAuthV2Client.getQHttpClient().shutdownConnection();
  9. Intent intent = new Intent(InsertWeiboActivity.this, OAuthV2AuthorizeWebView.class);//创建Intent,使用WebView让用户授权
  10. intent.putExtra("oauth", authV2);
  11. startActivityForResult(intent,2);
  12. }else{
  13. Toast.makeText(getApplicationContext(), "该用户已经授权", Toast.LENGTH_SHORT).show();
  14. Intent intent = new Intent();
  15. intent.putExtra("oauth", authV2);
  16. intent.putExtra("flag", MyContent.TENCENT);
  17. intent.setClass(InsertWeiboActivity.this, TestActivity.class);
  18. startActivity(intent);
  19. }

这里我们看到了startActivityForResult,它会在用户输入完用户名和密码后执行OnActivityResult方法(包括了人人的实现),isOauthTen()方法的作用是判断用户是否已经授权过该应用。它们的代码如下:

OnActivityResult()方法:

[java] view plaincopy
  1. /**
  2. * 新浪微博和人人网的授权
  3. * 通过读取OAuthV2AuthorizeWebView返回的Intent,获取用户授权信息
  4. */
  5. @Override
  6. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  7. if (requestCode==2) {
  8. //腾讯微博授权
  9. if (resultCode==OAuthV2AuthorizeWebView.RESULT_CODE)    {
  10. OAuthV2 oAuth=(OAuthV2) data.getExtras().getSerializable("oauth");
  11. if(oAuth != null && oAuth.getStatus()==0){
  12. Toast.makeText(getApplicationContext(), "登陆成功", Toast.LENGTH_SHORT).show();
  13. //跳转到发微博的界面
  14. Intent intent = new Intent();
  15. intent.putExtra("accessToken", oAuth.getAccessToken());
  16. intent.putExtra("oauth", oAuth);
  17. intent.putExtra("flag", MyContent.TENCENT);
  18. //将认证保存起来,使用对象流
  19. FileOutputStream fos = null;
  20. ObjectOutputStream oos = null;
  21. try {
  22. fos = new FileOutputStream(file);
  23. oos = new ObjectOutputStream(fos);
  24. oos.writeObject(oAuth);
  25. } catch (FileNotFoundException e) {
  26. e.printStackTrace();
  27. } catch (IOException e) {
  28. e.printStackTrace();
  29. } finally{
  30. if(oos != null){
  31. try {
  32. oos.close();
  33. oos = null;
  34. } catch (IOException e) {
  35. e.printStackTrace();
  36. }
  37. if(fos != null){
  38. try {
  39. fos.close();
  40. fos = null;
  41. } catch (IOException e) {
  42. e.printStackTrace();
  43. }
  44. }
  45. }
  46. }
  47. intent.setClass(InsertWeiboActivity.this, TestActivity.class);
  48. startActivity(intent);
  49. }
  50. else
  51. Toast.makeText(getApplicationContext(), "登陆失败", Toast.LENGTH_SHORT).show();
  52. }else{
  53. Toast.makeText(getApplicationContext(), "授权失败", Toast.LENGTH_SHORT).show();
  54. }
  55. }else if(requestCode == RENREN_REQUEST_CODE){
  56. //人人网授权
  57. if (renren != null) {
  58. renren.authorizeCallback(requestCode, resultCode, data);
  59. }else{
  60. Toast.makeText(getApplicationContext(), "授权失败", Toast.LENGTH_SHORT).show();
  61. }
  62. }
  63. }

isOauchTen()方法:

[java] view plaincopy
  1. /**
  2. * 腾讯微博接入是否已经验证
  3. * @return
  4. */
  5. private boolean isOauchTen() {
  6. boolean b = false;
  7. FileInputStream fis = null;
  8. ObjectInputStream ois = null;
  9. try {
  10. openFileOutput("aaa", Context.MODE_PRIVATE);
  11. persistTenOauth();
  12. fis = new FileInputStream(file);
  13. ois = new ObjectInputStream(fis);//此处抛出EOFException,原因是独到了流的末尾还是返回空,我们这里直接在异常中将标志位记为false即可。
  14. authV2 = (OAuthV2) ois.readObject();
  15. if(authV2 != null){
  16. b = true;
  17. }
  18. } catch (Exception e) {
  19. b = false;
  20. } finally{
  21. if(ois != null){
  22. try {
  23. ois.close();
  24. ois = null;
  25. } catch (Exception e2) {
  26. e2.printStackTrace();
  27. }
  28. }
  29. if(fis != null){
  30. try {
  31. fis.close();
  32. fis = null;
  33. } catch (Exception e2) {
  34. e2.printStackTrace();
  35. }
  36. }
  37. }
  38. return b;
  39. }

persistTenOauth()方法的作用是将我们获取到的token存储起来,由于调用腾讯微博api需要Token对象,没有办法所以我们只有将Token对象存起来,这里使用对象流的方式,具体实现如下:

[java] view plaincopy
  1. /**
  2. * 将腾讯微博的oauth持久化到文件中
  3. */
  4. private void persistTenOauth(){
  5. //加这一句的作用是防止  /data/data/package-name这个目录不存在
  6. String s = getFileStreamPath("aaa").getAbsolutePath();
  7. for(String ss : fileList()){
  8. System.out.println("ss==" + ss);
  9. }
  10. String x = "";
  11. try{
  12. x = s.substring(0,s.lastIndexOf("/"));
  13. }catch(Exception e){
  14. e.printStackTrace();
  15. x = "/data/data/yanbin.insertweibo";
  16. }
  17. //将文件存放在 /data/data/package-name目录下,当然你也可以存储在别的地方
  18. try {
  19. file = new File(x + "/oauth_ten.data");
  20. if(!file.exists()){
  21. new File(x).mkdirs();
  22. file.createNewFile();
  23. }
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27. }

至此,我们已经成功的获取到了访问腾讯微博必须的令牌,接下来我们就可以使用这个令牌操纵api了。

 人人网授权:

人人网并没有实现发心情的功能,只是简单的获取了它的token。

实现的代码如下:

[java] view plaincopy
  1. if(!isOauthRenren()){
  2. renren = new Renren(API_KEY, SECRET_KEY, APP_ID, this);
  3. renren.authorize(this, null, new MyRenrenListener(), RENREN_REQUEST_CODE);
  4. }else{
  5. Toast.makeText(getApplicationContext(), "该用户已经授权", Toast.LENGTH_SHORT).show();
  6. }

isOauthRenren用来判断用户是否对本客户端进行了授权。MyRenrenListener类会在用户在输入框中输入用户名和密码后回调。它们的具体实现如下:

isOauthRenren()方法:

[java] view plaincopy
  1. /**
  2. * renren 判断用户是否已经授权
  3. * @return
  4. */
  5. private boolean isOauthRenren(){
  6. boolean b = false;
  7. String token = getSharedPreferences("oauth_renren", Context.MODE_PRIVATE).getString("access_token", "");
  8. if(!"".equals(token)){
  9. b = true;
  10. }
  11. return b;
  12. }

MyRenrenListener类的实现:

[java] view plaincopy
  1. /**
  2. * 人人请求用户授权返回界面
  3. * @author yanbin
  4. *
  5. */
  6. private class MyRenrenListener implements RenrenAuthListener{
  7. @Override
  8. public void onComplete(Bundle values) {
  9. //服务器端返回的数据
  10. //          {
  11. //          "access_token": "10000|5.a6b7dbd428f731035f771b8d15063f61.86400.1292922000-222209506",
  12. //          "expires_in": 87063,
  13. //          "refresh_token": "10000|0.385d55f8615fdfd9edb7c4b5ebdc3e39-222209506",
  14. //          "scope": "read_user_album read_user_feed"
  15. //          }
  16. Bundle bundle = values;
  17. String access_token = bundle.getString("access_token");
  18. int expires_in = bundle.getInt("expires_in");
  19. String refresh_token = bundle.getString("refresh_token");
  20. String scope = bundle.getString("scope");
  21. System.out.println("验证服务器端返回的数据-->" + "access_token-->" + access_token
  22. + ",expires_in-->" + expires_in
  23. + ",refresh_token-->" + refresh_token
  24. + ",scope-->" + scope);
  25. SharedPreferences sp = getSharedPreferences("oauth_renren", Context.MODE_PRIVATE);
  26. sp.edit().putString("access_token", access_token).commit();
  27. Toast.makeText(getApplicationContext(), "用户授权成功", Toast.LENGTH_SHORT).show();
  28. //结果:
  29. //验证服务器端返回的数据-->access_token-->206681|6.725b8c8b3457a7d2953868d63aaf4486.2592000.1346828400-473945629
  30. //,expires_in-->0,refresh_token-->null,
  31. //scope-->publish_feed create_album photo_upload read_user_album status_update
  32. }
  33. @Override
  34. public void onRenrenAuthError(RenrenAuthError renrenAuthError) {
  35. Toast.makeText(getApplicationContext(), "异常", Toast.LENGTH_SHORT).show();
  36. }
  37. @Override
  38. public void onCancelLogin() {
  39. //未作处理
  40. }
  41. @Override
  42. public void onCancelAuth(Bundle values) {
  43. //未作处理
  44. }
  45. }

至此,我们也成功的获取到了访问人人网api的token,接下来就是对api的操作了。下面是一些相关的类(TestActivity.java)和AndroidManifest.xml文件。

TestActivity.java:

[java] view plaincopy
  1. package yanbin.insertWeibo;
  2. import java.net.InetAddress;
  3. import java.net.NetworkInterface;
  4. import java.net.SocketException;
  5. import java.util.Enumeration;
  6. import com.tencent.weibo.api.TAPI;
  7. import com.tencent.weibo.constants.OAuthConstants;
  8. import com.tencent.weibo.oauthv2.OAuthV2;
  9. import com.weibo.net.Utility;
  10. import com.weibo.net.Weibo;
  11. import com.weibo.net.WeiboException;
  12. import com.weibo.net.WeiboParameters;
  13. import android.app.Activity;
  14. import android.os.Bundle;
  15. import android.view.View;
  16. import android.widget.Button;
  17. import android.widget.EditText;
  18. import android.widget.Toast;
  19. /**
  20. * 腾讯微博,新浪微博   简单的发送一条微博,可以进你自己的微博查看是否发送成功
  21. * @author yanbin
  22. */
  23. public class TestActivity extends Activity {
  24. Button btnSend ;
  25. EditText et;
  26. String accessToken;
  27. OAuthV2 oAuthV2,oAuthV2_2;
  28. int flag ;//flag用来标记是来自新浪,腾讯微博还是人人
  29. @Override
  30. protected void onCreate(Bundle savedInstanceState) {
  31. super.onCreate(savedInstanceState);
  32. setContentView(R.layout.send_weibo);
  33. accessToken = getIntent().getStringExtra("accessToken");
  34. flag = getIntent().getIntExtra("flag", -1);
  35. oAuthV2 =  (OAuthV2) getIntent().getSerializableExtra("oauth");
  36. btnSend = (Button) findViewById(R.id.btnSend);
  37. et = (EditText) findViewById(R.id.et);
  38. }
  39. public void click(View view){
  40. int id = view.getId();
  41. switch (id) {
  42. case R.id.btnSend:
  43. switch (flag) {
  44. case MyContent.SINA:
  45. Weibo weibo = Weibo.getInstance();
  46. WeiboParameters parameters = new WeiboParameters();
  47. parameters.add("access_token", accessToken);
  48. parameters.add("status", et.getText().toString());
  49. //发送一条微博 url https://api.weibo.com/2/statuses/update.json
  50. try {
  51. String flag = weibo.request(this, Weibo.SERVER + "statuses/update.json", parameters, Utility.HTTPMETHOD_POST, weibo.getAccessToken());
  52. System.out.println("flag==" + flag);
  53. Toast.makeText(this, "发送微博成功", 1).show();
  54. } catch (WeiboException e) {
  55. e.printStackTrace();
  56. Toast.makeText(this, "发送微博失败", 1).show();
  57. }
  58. finish();
  59. break;
  60. case MyContent.TENCENT:
  61. TAPI tapi = new TAPI(OAuthConstants.OAUTH_VERSION_2_A);
  62. try {
  63. String response=tapi.add(oAuthV2, "json", et.getText().toString(), getHostIp());
  64. System.out.println("response==" + response);
  65. tapi.shutdownConnection();
  66. System.out.println("发送微博成功");
  67. Toast.makeText(this, "发送微博成功", 1).show();
  68. } catch (Exception e) {
  69. e.printStackTrace();
  70. Toast.makeText(this, "发送微博失败", 1).show();
  71. }
  72. finish();
  73. break;
  74. }
  75. break;
  76. }
  77. }
  78. /**
  79. * 获取用户ip
  80. * @return
  81. */
  82. public static String getHostIp() {
  83. try {
  84. for (Enumeration<NetworkInterface> en = NetworkInterface
  85. .getNetworkInterfaces(); en.hasMoreElements();) {
  86. NetworkInterface intf = en.nextElement();
  87. for (Enumeration<InetAddress> ipAddr = intf.getInetAddresses(); ipAddr
  88. .hasMoreElements();) {
  89. InetAddress inetAddress = ipAddr.nextElement();
  90. if (!inetAddress.isLoopbackAddress()) {
  91. return inetAddress.getHostAddress();
  92. }
  93. }
  94. }
  95. } catch (SocketException ex) {
  96. } catch (Exception e) {
  97. }
  98. return null;
  99. }
  100. }

AndroidManifest.xml:

[java] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="yanbin.insertWeibo"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6. <uses-sdk android:minSdkVersion="7" />
  7. <application
  8. android:icon="@drawable/ic_launcher"
  9. android:label="@string/app_name" >
  10. <activity
  11. android:name=".InsertWeiboActivity"
  12. android:label="@string/app_name" >
  13. <intent-filter>
  14. <action android:name="android.intent.action.MAIN" />
  15. <category android:name="android.intent.category.LAUNCHER" />
  16. </intent-filter>
  17. </activity>
  18. <activity android:name=".TestActivity"></activity>
  19. <!-- OAuth Version 2. 使用  WebView 辅助进行ImplicitGrant方式授权必须 -->
  20. <activity
  21. android:name="com.tencent.weibo.webview.OAuthV2AuthorizeWebView"
  22. android:label="@string/app_name" >
  23. </activity>
  24. </application>
  25. <uses-permission android:name="android.permission.INTERNET"></uses-permission>
  26. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
  27. <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission>
  28. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
  29. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
  30. <!-- 在SDCard中创建与删除文件权限 -->
  31. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  32. <!-- 往SDCard写入数据权限 -->
  33. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  34. </manifest>

六:结束语

接入社交平台本就是一个比价简单的功能,但是由于本人能力有限,组织语言能力也有限,所以整出了这么长一个篇幅,而且感觉还讲的不是很清楚,大部分篇幅都在贴代码。第一次发文章,感觉吧,特累。不说了,有需要的朋友直接去下demo自己捉摸捉摸吧。

DEMO下载地址:http://download.csdn.net/detail/yanbin1079415046/4497659

android客户端接入新浪、腾讯微博以及人人网相关推荐

  1. android 一键接入新浪微博,腾讯微博,人人网,QQ空间,微信好友圈 (只需5分钟)

    前言: 目前的移动产品,必须整合第三方分享功能,利用其关系链进行病毒式传播... 正文: 由于已经封装了一个分享SDK,所以开发者需要的操作是: 1. 申请各个平台的App_Key,App_Secre ...

  2. 新浪腾讯微博互刷互粉工具-网页版

    其实早些年,应该算是前年吧.就已经注册了新浪微博,然后腾讯微博出来了就又注册了腾讯微博,不过,推特还真没注册过,当我知道的时候就已经需要爬墙了,人矮,懒得爬了! 那时候,腾讯我记得我发过好几期的邀请码 ...

  3. HBuilder webApp开发(七)微信/QQ/新浪/腾讯微博分享

    HBuilder是支持微信分享(好友和朋友圈),QQ分享,新浪微博和腾讯微博分享. 但是在使用的过程中,官方给的文档似乎很坑爹. <分享插件配置> <分享插件开发指南> 都是2 ...

  4. 接入新浪、腾讯微博和人人网的Android客户端实例 接入新浪、腾讯微博和人人网的Android客户端实例...

    做了个Android项目,需要接入新浪微博,实现时也顺带着研究了下腾讯微博和人人网的Android客户端接入,本文就跟大家分享下三者的Android客户端接入方法. 一.实例概述 说白了,接入微博就是 ...

  5. 分享到新浪/腾讯/人人等

    我们经常会有分享到大网站的需求来满足用户吸引.常用的有分享到新浪/腾讯/人人网等.那么如何实现这些分享呢?今天就来探究一下,,首先了解一下第三方登录. 1.常用的第三方登陆 我们想要在自己的网站上提供 ...

  6. 在线登录注册功能(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库)

    在线登录注册功能(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库) 完整的项目已上传github仓库,链接在文章最下面 注:笔者在安卓客户端部分写了kotlin语言和java语 ...

  7. 新浪押宝微博拖累利润 开支增长近2730万美元

    新浪押宝微博拖累利润 开支增长近2730万美元 新浪(SINA.NASDAQ)仍然在加大对微博的投入.由于来自于微博有关的营销和人力相关开支增加,二季度运营开支同比增加近2730万美元,环比增长近一倍 ...

  8. 新浪能让微博变成一家移动公司吗?

    关于新浪微博架构调整,新浪无线事业部并入微博,以及阿里巴巴(甚至可能还有百度)入股新浪微博的两个传闻,在我看来最后都可能归到一个问题上:新浪敢让微博变成一家移动公司(或至少,是移动为先Mobile F ...

  9. 鹿定制与国际大牌西服的10点区别?丨新浪官方长微博工具

    鹿定制与国际大牌西服的10点区别?丨新浪官方长微博工具 鹿定制与国际大牌西服的10点区别?丨新浪官方长微博工具 鹿定制与国际大牌西服的10点区别? posted on 2014-08-23 19:48 ...

最新文章

  1. supervisor 守护多个进程_supervisor守护进程管理实操笔记
  2. Python中的id()函数_怪异现象
  3. 控制连接数量和密码保护-flashcom教程 密码保护
  4. Linux下压缩、解压缩、效率,linux tar bz、bz2、gz、zip
  5. 11.8 scrum report
  6. Bean被IoC容器销毁后还能使用吗?
  7. 云计算发展趋势(二)实现云计算的技术以及其他新兴技术介绍
  8. 系列之FIRST——跑酷小游戏:关卡+BOSS+技能版
  9. 用python做动画的代码_Python应用 | 三行代码实现GIF动画
  10. 动物名称日语单词集合
  11. win10如何使任务栏全透明
  12. C51单片机的压缩BCD码相加程序
  13. 关于路由的这10个问题,网络工程师们应该掌握
  14. 山寨电视不会成为山寨手机第二
  15. EXCEL vba工程密码破解
  16. 如何在浏览器中执行js脚本
  17. 计算机毕业设计JAVA前行国家公务员模拟笔试系统mybatis+源码+调试部署+系统+数据库+lw
  18. 深度推荐模型 - DIN
  19. 搜索引擎网站提交入口地址
  20. 如何批量去水印?水印云批量去水印工具

热门文章

  1. 【C++】Clang-Format:代码自动格式化(看这一篇就够了)
  2. Python 二维数据
  3. vue点击按钮打开新页签,并传参
  4. long term recurrent convolutional networks for visual recognition and description
  5. html5支持ajax和jQuery吗,使用HTML5文件上传与AJAX和jQuery(Using HTML5 file uploads with AJAX and jQuery)...
  6. 景点门票销售管理系统 基于 python实现gui界面 之 笔记
  7. Taro3.2 适配 React Native 之运行时架构详解
  8. 【JavaSe】面向对象篇(五) 三大特征之二继承
  9. 机器学习之贝叶斯网络实践(举例)
  10. Java数据结构——直接插入排序+希尔排序+冒泡排序