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

做了个Android项目,需要接入新浪微博,实现时也顺带着研究了下腾讯微博和人人网的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作为验证与授权协议。

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

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

     三、关于OAuth2.0

本人比较懒,就不把概念贴在这里了。自己百度去吧,百度百科中有这样的一句概括:OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。这里我们稍微说一下OAuth2.0的认证流程。

在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代码

  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代码

  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代码

  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类型的参数,值就是我们在之前提到过得那个授权回调页的地址。接着新浪微博将弹出一个授权页面的对话框,供用户输入用户名和密码(此处就不截图了)。在用户输入用户名和密码之后,它将被我们的OauthDialogListener类监听到,它的实现如下:

Java代码

  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代码

  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代码

  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代码

  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代码

  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代码

  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代码

  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代码

  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代码

  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:

XML/HTML代码

  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>

接入社交平台本就是一个比较简单的功能,想跟大家说详细些,所以文章篇幅有点长,望耐心看完。

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

时间: 2024-10-04 18:26:39

接入新浪、腾讯微博和人人网的Android客户端实例 接入新浪、腾讯微博和人人网的Android客户端实例的相关文章

国内各大互联网公司相关技术站点3.0版 (集合腾讯、阿里、百度、搜狐、新浪、网易、360等共28个)

在2013-07-15 ,3年前整理了一份国内各大互联网公司相关技术站点2.0版 (集合腾讯.阿里.百度.搜狐.新浪.360等共49个) 近日重新整理了一番,希望能对大家有所帮助 2013年 腾讯系列(13)  阿里系列(18)  百度系列(3)  搜狐系列(3)  新浪系列(2)  360系列(2)   其他(9) 2016年 腾讯系列(8)  阿里系列(5)  百度系列(6)  搜狐系列(1)  新浪系列(1)  360系列(2)   其他(3) 新增 网易(2) 腾讯系列(8) 现存(7)

[转]国内各大互联网公司相关技术站点2.0版 (集合腾讯、阿里、百度、搜狐、新浪、360等共49个)

利用闲暇时间整理了一份国内各大互联网公司的相关技术站点,希望能够对大家有所帮助,也欢迎各位帮忙补充. 腾讯系列(13)  阿里系列(18)  百度系列(3)  搜狐系列(3)  新浪系列(2)  360系列(2)   其他(9) 腾讯系列(13) 1.MacQQ的项目团队 IBlog 2.财付通设计中心 UID 3.QQ邮箱博客 4.QQ客户端团队博客 5.腾讯用户研究与体验设计中心 CDC 6.腾讯Web前端 Alloy 团队 Blog 7.腾讯微信博客 8.腾讯游戏官方设计团队TGideas

国内各大互联网公司相关技术博客3.0版 (集合腾讯、阿里、百度、搜狐、新浪、网易、360等共29个)

在2013-07-15 整理了一份国内各大互联网公司相关技术站点2.0版 (集合腾讯.阿里.百度.搜狐.新浪.360等共49个) 近日重新整理了一番,希望能对大家有所帮助 2013年 腾讯系列(13)  阿里系列(18)  百度系列(3)  搜狐系列(3)  新浪系列(2)  360系列(2)   其他(9) 2016年 腾讯系列(9)  阿里系列(5)  百度系列(6)  搜狐系列(1)  新浪系列(1)  360系列(2)   其他(3) 新增 网易(2) 腾讯系列(9) 1.财付通设计中心

android平台sdk接入的一些坑

1.应用宝.应用宝是腾讯的一个平台,算是比较大的平台了,所以一般游戏都会接入该平台SDK.该平台SDK接入的时候需要注意的是必须签名发包才能登录,其次就是好像需要自己弄QQ登录和微信登录这2个按钮. 2.华为平台.华为也是国内比较大的一个平台.华为需要注意的是第一次登录游戏的时候会提示是否签华为条款的?要是玩家点了否是需要退出游戏的或者重新弹条款.接入SDK的时候需要注意这个,一般很容易忘记. 3.UC平台.UC平台最需要注意的就是他的数据收集里面有个创角时间,记住一定要给9位数的时间戳,我每次

Android进阶——Material Design新控件之初识TabLayout(一)

引言 Google I/O 2015 推出的 Android Design Support Library令人非常激动.Material Design的推出确实振奋了不少 Android开发者以及用户的心.以前Google给我的感觉就像是他并没太在乎他们的UI(或者审美不同,Gmail不忍吐槽),但是当Material Design伴随Android5.0发布之后,一切好像就都变了个样,Google好像意识到了设计的重要性以及自己以往的种种不足,决定也要迎头赶上,不仅仅只是推出一套Materia

用javascript得到客户端IP的新方法

javascript得到客户端IP的新方法 很久以来,我都是经过http://fw.qq.com/ipaddress来得到客户端用户的IP,这个方法简单.快速.实用 . 我们调用它的写法是: <script type="text/javascript" src="http://fw.qq.com/ipaddress"></script> 它可以返回用户IP和地点,比喻: var IPData = new Array("220.181

Android 即时音视频解决方案2——腾讯云

上一篇文章介绍了环信的解决方案,见Android 即时音视频解决方案1--环信,这篇文章,介绍一下更加靠谱,也就是腾讯云的解决方案,毕竟腾讯是是这方面的头头,比较靠谱.当然,集成腾讯云比集成环信稍微复杂那么一点,需要有一点点的耐心. 官方地址音视频云通信 AVC SDK下载AV Andriod1.3 文档地址音视频云通讯 先讲讲腾讯云的原理,使用腾讯云的时候,要有一个账号体系,这个账号体系比较灵活,可以使用独立模式也可以只用第三方账号体系,这里使用独立模式. 使用独立模式,要使用腾讯云的服务的时

Android开发工程师,新长征路上的14项技能

导读: 你曾渴望回到宋朝吗? 或者什么朝,反正就是男耕女织的古代. 哦,那时的首都在汴梁(开封),房价想必没有这么高,工作?无非就是给你把锄头,去,种地去.夕阳西下了,麦子垛后,你和翠姑搂抱在一起,那时的你,生活的简单而美好. 看看现在的你,一个刚入门的安卓开发工程师,没有信用卡,没有她,没有24小时热水的家.你想念你的锄头和翠姑(或麦垛),可你回不去了,你现在手中的安卓手机,冰冷如铁,你不知道如何在这4寸屏的小东西上打出一片天地. 你不用感到不知所措和困惑,技术就是你安身立命的根本,当下,你的

Android Service组件在新进程绑定(bindService)过程

1.首先看两个例子 (1)进程内 Client端 public class CounterService extends Service implements ICounterService { ...... public class CounterBinder extends Binder { public CounterService getService() { return CounterService.this; } } ...... } Server端 public class Ma