Android使用shareSDK第三方登录(qq,微信,微博)

第一步:下载SDK:http://www.mob.com/#/downloadDetail/ShareSDK/android,选择自己要集成的平台,下载

解压文件,打开ShareSDK for Android文件夹,运行QuickIntegrater.jar,选择需要的内容。会生成Sample文件夹

第二步:将assets,libs,res内容复制到项目中,只集成登录src下的文件只需要Sample\src\cn\sharesdk\demo\wxapi的WXEntryActivity.java文件,复制到项目中(assets应该在main下面,和java,res并列)

第三步:复制权限

<uses-permission android:name="android.permission.GET_TASKS" />
 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
 <uses-permission android:name="android.permission.GET_ACCOUNTS"/>

第四步:添加activity

<activity
     android:name="com.mob.tools.MobUIShell"
     android:theme="@android:style/Theme.Translucent.NoTitleBar"
     android:configChanges="keyboardHidden|orientation|screenSize"
     android:screenOrientation="portrait"
     android:windowSoftInputMode="stateHidden|adjustResize" >


     <intent-filter>
         <data android:scheme="tencent100371282" />
         <action android:name="android.intent.action.VIEW" />
         <category android:name="android.intent.category.BROWSABLE" />
         <category android:name="android.intent.category.DEFAULT" />
     </intent-filter>


    <!-- 调用新浪原生SDK,需要注册的回调activity -->
    <intent-filter>
        <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
 </activity>

<!-- 微信分享回调-->

<activity
    android:name=".wxapi.WXEntryActivity"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:exported="true"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"/>

第五步:更改assets下ShareSDK的appkey,qq空间,微信,微博 (RedirectUrl必须和微博注册的回调一样)

第六步:在activity内实现

 PlatformActionListener,Handler.Callback接口
private static final int MSG_USERID_FOUND = 1;//用户已经存在
private static final int MSG_LOGIN = 2;//登录中
private static final int MSG_AUTH_CANCEL = 3;//取消授权
private static final int MSG_AUTH_ERROR = 4;//授权出错
private static final int MSG_AUTH_COMPLETE = 5;//授权成功
private HashMap<String, Object> mapQQ = new HashMap<>();//授权信息
private HashMap<String, Object> mapSina = new HashMap<>();//授权信息
private HashMap<String, Object> mapWeChat = new HashMap<>();//授权信息

点击事件调用

/**
 * 用于授权
 *
 * @param plat
 */
private void authorize(Platform plat) {
    //如果用户已经授权过,用户信息还存在,将执行if语句
    plat.removeAccount();//第一次授权后之后下面的方法会不显示授权页面,所以添加这一句,每次都显示授权页面
//也可以删除下面的if语句,如果需要不显示可以添加   
 if (plat.isValid()) {
        String userId = plat.getDb().getUserId();
        if (!TextUtils.isEmpty(userId)) {
            UIHandler.sendEmptyMessage(MSG_USERID_FOUND, this);
            if (plat.getName().equals("QQ")) {
                login(plat.getName());
            } else if (plat.getName().equals("SinaWeibo")) {
                login(plat.getName());
            } else if (plat.getName().equals("Wechat")) {
                login(plat.getName());
            }
            return;
        }
    }
    //授权监听
    plat.setPlatformActionListener(this);
    plat.SSOSetting(false);
    plat.showUser(null);
    dialog=new ProgressDialog(this);//qq授权在授权页面关闭后,很久才会提示授权成功,所以需要显示一
个加载中的dialog
    dialog.show();
}

/**
 * 正在登录中
 *
 * @param plat
 */
private void login(String plat) {
    Message msg = new Message();
    msg.what = MSG_LOGIN;
    msg.obj = plat;
    UIHandler.sendMessage(msg, this);
    dialog.dismiss();
    finish();
}
 @Override
    public void onComplete(Platform platform, int action, HashMap<String, Object> res) {
        if (action == Platform.ACTION_USER_INFOR) {
            if (platform.getName().equals("QQ")) {
                mapQQ.clear();
                mapQQ = res;
                String openId = platform.getDb().getUserId();//qq的用户id
            } else if (platform.getName().equals("SinaWeibo")) {
                mapSina.clear();
                mapSina = res;
                String openId = platform.getDb().getUserId();//微博的
            } else if (platform.getName().equals("Wechat")) {
                mapWeChat.clear();
                mapWeChat = res;
                String unionid = platform.getDb().get("unionid");//微信的用户id
            }
            UIHandler.sendEmptyMessage(MSG_AUTH_COMPLETE, this);
        }
    }

    @Override
    public void onError(Platform platform, int action, Throwable throwable) {
        if (action == Platform.ACTION_USER_INFOR) {
            UIHandler.sendEmptyMessage(MSG_AUTH_ERROR, this);
        }
        throwable.printStackTrace();
        dialog.dismiss();
    }

    @Override
    public void onCancel(Platform platform, int action) {
        if (action == Platform.ACTION_USER_INFOR) {
            UIHandler.sendEmptyMessage(MSG_AUTH_CANCEL, this);
        }
        dialog.dismiss();
    }
    @Override
    public boolean handleMessage(Message msg) {
        switch (msg.what) {
            case MSG_USERID_FOUND:
                UtilToast.show(this,getResources().getText(R.string.login_userexists));
            break;
            case MSG_LOGIN:
//                UtilToast.show(this, getString(0, msg.obj));
            break;
            case MSG_AUTH_CANCEL:
                UtilToast.show(this,getResources().getText(R.string.login_unauthorize));
            break;
            case MSG_AUTH_ERROR:
                UtilToast.show(this,getResources().getText(R.string.login_authorizationerror));
            break;
            case MSG_AUTH_COMPLETE:
                UtilToast.show(this,getResources().getText(R.string.login_authorizationsuccess));
            break;
        }
        return false;
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值