美文网首页登录
android--QQ账号登陆第三方应用

android--QQ账号登陆第三方应用

作者: 爱情小傻蛋 | 来源:发表于2016-10-18 15:02 被阅读163次

    1.在开发之前,首先要使用QQ号登录平台,然后完善开发者信息成为开发者,之后,要在管理中心,创建你的应用,其中包括完善很多关于你的应用的信息。(关于这部分的详细信息,请查看官方在线文档开发者注册和android应用注册)。

    2.当我们成功创建 了应用之后,会获得APP ID,这个ID在开发中是必须的。
    3.QQ互联SDK,前往该网页,可以下载官方的sdk资料,其中 包括了jar文件,demo,以及详细的开发说明文档。
    4.(警醒)开发的第一步,首先要把所需要的jar文件导入到我们的工程中去,在上一步下载的SDK文档中,我们会发现有一个open_sdk.jar文件,按照说明文档导入进去,但是我们会发现在说明文档中分明提到了2个jar文件,
    sdk中的open_sdk.jar和mta_sdk_XXX.jar导入到工程之后,可以按照开发文档,继续往下进行。
    5.关于AndroidManifest的配置,开发文档比较详尽,不赘述。

    使用的sdk版本: V2.2.2(发布日期:2014.3.17)
    因为,开发SDK的版本更新比较快,阅读的童鞋注意点吧。

    开工前期的准备:
    1.建议你首先去下载最新的SDK,那里面除了有案例外,还有必须的jar包(open_sdk.jar和mta_sdk_XXX.jar)。
    2.最好在qq的开发平台自己注册个账号,那样移植起来更容易点。
    给个链接吧:
    下载

    配置清单:
    1.添加权限:

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
    

    2.添加活动:

    <activity  
                android:name="com.tencent.tauth.AuthActivity"  
                android:launchMode="singleTask"  
                android:noHistory="true" >  
               <intent-filter>  
                   <action android:name="android.intent.action.VIEW" />  
      
                    <category android:name="android.intent.category.DEFAULT" />  
                    <category android:name="android.intent.category.BROWSABLE" />  
      
                    <data android:scheme="tencent222222" />   
                </intent-filter>  
            </activity>  
            <activity  
                android:name="com.tencent.connect.common.AssistActivity"  
                android:screenOrientation="portrait"  
                android:theme="@android:style/Theme.Translucent.NoTitleBar" />  
    

    在tencent后面添加自己的应用id,222222是腾讯给的专用测试id。

    顺便提醒一句,在这个版本中要导入两个jar包(open_sdk.jar和mta_sdk_XXX.jar)。

    布局:

    <?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:orientation="vertical" >  
      
       <TextView  
            android:id="@+id/user_nickname"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="昵称" />  
      
        <ImageView  
            android:id="@+id/user_logo"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content" />  
      
        <Button  
            android:id="@+id/new_login_btn"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:text="登录" />  
      
        <TextView  
            android:id="@+id/user_callback"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="返回消息" />  
    

    活动的详细代码:

    public class TestQQ extends Activity implements OnClickListener {  
       private TextView mUserInfo;  
       private ImageView mUserLogo;  
       private Button mNewLoginButton;  
       private TextView backInfo;  
     
       private UserInfo mInfo;  
       private Tencent mTencent;  
       public QQAuth mQQAuth;  
       // 申请的id  
       public String mAppid = "222222";  
     
       @Override  
       protected void onCreate(Bundle savedInstanceState) {  
           super.onCreate(savedInstanceState);  
           setContentView(R.layout.acy_testqq);  
           initView();  
       }  
     
       public void initView() {  
           mUserInfo = (TextView) findViewById(R.id.user_nickname);  
           mUserLogo = (ImageView) findViewById(R.id.user_logo);  
           mNewLoginButton = (Button) findViewById(R.id.new_login_btn);  
           mNewLoginButton.setOnClickListener(this);  
           backInfo = (TextView) findViewById(R.id.user_callback);  
           // Tencent类是SDK的主要实现类,通过此访问腾讯开放的OpenAPI。  
           mQQAuth = QQAuth.createInstance(mAppid, this.getApplicationContext());  
           // 实例化  
           mTencent = Tencent.createInstance(mAppid, this);  
       }  
     
       Handler mHandler = new Handler() {  
     
           @Override  
           public void handleMessage(Message msg) {  
               if (msg.what == 0) {  
                   mUserInfo.setVisibility(android.view.View.VISIBLE);  
                   mUserInfo.setText(msg.getData().getString("nickname"));  
               } else if (msg.what == 1) {  
                   Bitmap bitmap = (Bitmap) msg.obj;  
                   mUserLogo.setImageBitmap(bitmap);  
                   mUserLogo.setVisibility(android.view.View.VISIBLE);  
               }  
           }  
       };  
     
       private void updateUserInfo() {  
           if (mQQAuth != null && mQQAuth.isSessionValid()) {  
               IUiListener listener = new IUiListener() {  
                   @Override  
                   public void onError(UiError e) {  
                       // TODO Auto-generated method stub  
                   }  
     
                   @Override  
                   public void onComplete(final Object response) {  
                       JSONObject json = (JSONObject) response;  
                       // 昵称  
                       Message msg = new Message();  
                       String nickname = null;  
                       try {  
                           nickname = ((JSONObject) response)  
                                   .getString("nickname");  
                       } catch (JSONException e) {  
                           // TODO Auto-generated catch block  
                           e.printStackTrace();  
                       }  
                       msg.getData().putString("nickname", nickname);  
                       msg.what = 0;  
                       mHandler.sendMessage(msg);  
                       // 头像  
                       String path;  
                       try {  
                           path = json.getString("figureurl_qq_2");  
                           MyImgThread imgThread = new MyImgThread(path);  
                           Thread thread = new Thread(imgThread);  
                           thread.start();  
                       } catch (JSONException e1) {  
                           // TODO Auto-generated catch block  
                           e1.printStackTrace();  
                       }  
                   }  
     
                   @Override  
                   public void onCancel() {  
                       // TODO Auto-generated method stub  
     
                   }  
               };  
               // MainActivity.mTencent.requestAsync(Constants.GRAPH_SIMPLE_USER_INFO,  
               // null,  
               // Constants.HTTP_GET, requestListener, null);  
               mInfo = new UserInfo(this, mQQAuth.getQQToken());  
               mInfo.getUserInfo(listener);  
     
           } else {  
               // mUserInfo.setText("");  
               // mUserInfo.setVisibility(android.view.View.GONE);  
               // mUserLogo.setVisibility(android.view.View.GONE);  
           }  
       }  
     
         
       class MyImgThread implements Runnable {  
           private String imgPath;  
           private Bitmap bitmap;  
     
           public MyImgThread(String imgpath) {  
               this.imgPath = imgpath;  
           }  
     
           @Override  
           public void run() {  
               // TODO Auto-generated method stub  
               bitmap = getImgBitmap(imgPath);  
               Message msg = new Message();  
               msg.obj = bitmap;  
               msg.what = 1;  
               mHandler.sendMessage(msg);  
           }  
       }  
     
         
       public Bitmap getImgBitmap(String imageUri) {  
           // 显示网络上的图片  
           Bitmap bitmap = null;  
           HttpURLConnection conn = null;  
           InputStream is = null;  
           try {  
               URL myFileUrl = new URL(imageUri);  
               conn = (HttpURLConnection) myFileUrl.openConnection();  
               conn.setDoInput(true);  
               conn.connect();  
     
               is = conn.getInputStream();  
               bitmap = BitmapFactory.decodeStream(is);  
               is.close();  
           } catch (IOException e) {  
               e.printStackTrace();  
               return null;  
           } finally {  
               try {  
                   conn.disconnect();  
                   is.close();  
                   is.reset();  
               } catch (IOException e) {  
                   // TODO Auto-generated catch block  
                   e.printStackTrace();  
               }  
           }  
           return bitmap;  
       }  
     
       public void onClickLogin() {  
           // 登录  
           if (!mQQAuth.isSessionValid()) {  
               // 实例化回调接口  
               IUiListener listener = new BaseUiListener() {  
                   @Override  
                   protected void doComplete(JSONObject values) {  
                       updateUserInfo();  
                       // updateLoginButton();  
                       if (mQQAuth != null) {  
                           mNewLoginButton.setTextColor(Color.BLUE);  
                           mNewLoginButton.setText("登录");  
                       }  
                   }  
               };  
               // "all": 所有权限,listener: 回调的实例  
               // mQQAuth.login(this, "all", listener);  
     
               // 这版本登录是使用的这种方式,后面的几个参数是啥意思 我也没查到  
               mTencent.loginWithOEM(this, "all", listener, "10000144",  
                       "10000144", "xxxx");  
           } else {  
               // 注销登录  
               mQQAuth.logout(this);  
               updateUserInfo();  
     
               // updateLoginButton();  
               mNewLoginButton.setTextColor(Color.RED);  
               mNewLoginButton.setText("退出帐号");  
           }  
       }  
     
         
       private class BaseUiListener implements IUiListener {  
             
           @Override  
           public void onComplete(Object response) {  
               backInfo.setText(response.toString());  
               doComplete((JSONObject) response);  
           }  
     
             
           protected void doComplete(JSONObject values) {  
     
           }  
     
           @Override  
           public void onError(UiError e) {  
               Toast.makeText(TestQQ.this, e.toString(), 1000).show();  
           }  
     
           @Override  
           public void onCancel() {  
               Toast.makeText(TestQQ.this, "cancel", 1000).show();  
           }  
       }  
     
       @Override  
       public void onClick(View v) {  
           // TODO Auto-generated method stub  
           // 当点击登录按钮  
           if (v == mNewLoginButton) {  
               onClickLogin();  
           }  
       }  
     
    }  
    

    测试:

    1.运行的开始界面: android--QQ账号登陆第三方应用
    2.当你的手机没用安装qq的时候,会跳转到网页qq注册界面:
    android--QQ账号登陆第三方应用
    3.如果手机上有qq客户端: android--QQ账号登陆第三方应用
    4.获取成功:
    android--QQ账号登陆第三方应用

    注意:
    1.因为我使用的是腾讯给的测试接口id,如果你也是使用的测试接口的话,那么记得把应用的名字改为: “open_sample”。
    2.在进行登录的时候,可以进行判断是否适合sso登录。
    // 是否支持sso登录

                if (mTencent.isSupportSSOLogin(this)) {  
                    onClickLogin();  
                }  
    

    当支持的时候,就返回真,否则返回假。

    相关文章

      网友评论

        本文标题:android--QQ账号登陆第三方应用

        本文链接:https://www.haomeiwen.com/subject/kzhtuttx.html