ShareSdk的第三方登錄QQ和微博(Mob)--個(gè)人筆記

第三方登錄除了在qq平臺(tái)申請(qǐng),也可以用mob 的shareSDK來登錄,不過前提是之前先嵌入好了shareSDK分享功能的,前面的分享這里就不多說了,主要是做登錄,分享的具體做法,可以看mob官網(wǎng)的方法,提供一個(gè)鏈接
mob的分享快速集成指南
這里保證你的demo能夠完成分享功能,如下圖所示


之后是一些配置問題,在ShareSDK.xml里面配置自己的appid

記得在登錄前必須先初始化

ShareSDK.initSDK(this);

之后就是mainActivity的代碼了:
這里包含了兩個(gè)頁面,也寫了分享功能在里面

package com.example.yukun.webapplication;

import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;


import com.mob.tools.utils.UIHandler;

import java.util.HashMap;

import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.onekeyshare.OnekeyShare;
import cn.sharesdk.tencent.qq.QQ;
import cn.sharesdk.tencent.weibo.TencentWeibo;

public class ShareActivity extends AppCompatActivity implements PlatformActionListener, Handler.Callback {
private static final int MSG_USERID_FOUND = 1;//用戶已經(jīng)存在
private static final int MSG_LOGIN = 2;//登錄中
private static final int MSG_AUTH_CANCEL = 3;//取消授權(quán)
private static final int MSG_AUTH_ERROR = 4;//授權(quán)出錯(cuò)
private static final int MSG_AUTH_COMPLETE = 5;//授權(quán)成功
private HashMap<String, Object> mapQQ = new HashMap<String, Object>();//授權(quán)信息
private HashMap<String, Object> mapSina = new HashMap<String, Object>();//授權(quán)信息
private SquareProgressBar squareProgressBar;
private TextView textView;
private com.example.yukun.webapplication.squareprogressbar.SquareProgressBar progressBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_share);
    ShareSDK.initSDK(this);
    init();
}
   //第一個(gè)按鈕,表示分享
public void Btn1(View view) {
    showShare();
}

//第二個(gè)按鈕表示qq登錄
public void Btn2(View view) {
    authorize(new QQ(this));
}

//第三個(gè)按鈕表示微博登錄
public void Btn3(View view) {
    authorize(new TencentWeibo(this));
}

private void showShare() {
    OnekeyShare oks = new OnekeyShare();
    //關(guān)閉sso授權(quán)
    oks.disableSSOWhenAuthorize();
    // 分享時(shí)Notification的圖標(biāo)和文字  2.5.9以后的版本不調(diào)用此方法
    //oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
    // title標(biāo)題,印象筆記、郵箱、信息、微信、人人網(wǎng)和QQ空間使用
    oks.setTitle("title");
    // titleUrl是標(biāo)題的網(wǎng)絡(luò)鏈接,僅在人人網(wǎng)和QQ空間使用
    oks.setTitleUrl("http://sharesdk.cn");
    // text是分享文本,所有平臺(tái)都需要這個(gè)字段
    oks.setText("我是分享文本");
    //分享網(wǎng)絡(luò)圖片,新浪微博分享網(wǎng)絡(luò)圖片需要通過審核后申請(qǐng)高級(jí)寫入接口,否則請(qǐng)注釋掉測試新浪微博
    oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");
    // imagePath是圖片的本地路徑,Linked-In以外的平臺(tái)都支持此參數(shù)
    //oks.setImagePath("/sdcard/test.jpg");//確保SDcard下面存在此張圖片
    // url僅在微信(包括好友和朋友圈)中使用
    oks.setUrl("http://sharesdk.cn");
    // comment是我對(duì)這條分享的評(píng)論,僅在人人網(wǎng)和QQ空間使用
    oks.setComment("我是測試評(píng)論文本");
    // site是分享此內(nèi)容的網(wǎng)站名稱,僅在QQ空間使用
    oks.setSite(getString(R.string.app_name));
    // siteUrl是分享此內(nèi)容的網(wǎng)站地址,僅在QQ空間使用
    oks.setSiteUrl("http://sharesdk.cn");

    // 啟動(dòng)分享GUI
    oks.show(this);
}

private void authorize(Platform plat) {
    if (plat.isValid()) {
        String userId = plat.getDb().getUserId();
        Log.i("----id",userId);
        if (!TextUtils.isEmpty(userId)) {
            UIHandler.sendEmptyMessage(MSG_USERID_FOUND, this);
            if (plat.getName().equals("QQ")) {
                login(plat.getName(), userId, mapQQ);

            }
            else if (plat.getName().equals("TencentWeibo")) {
                login(plat.getName(), userId, mapSina);
            }
            return;
        }
    }
    //若本地沒有授權(quán)過就請(qǐng)求用戶數(shù)據(jù)
    plat.setPlatformActionListener(this);//
    plat.SSOSetting(false);//此處設(shè)置為false,則在優(yōu)先采用客戶端授權(quán)的方法,設(shè)置true會(huì)采用網(wǎng)頁方式
    plat.showUser(null);//獲得用戶數(shù)據(jù)

}

private void login(String plat, String userId, HashMap<String, Object> userInfo) {

    Message msg = new Message();
    msg.what = MSG_LOGIN;
    msg.obj = plat;
    UIHandler.sendMessage(msg, this);
    //跳轉(zhuǎn)到第二個(gè)頁面,獲取到的數(shù)據(jù)就在這里
    Intent intent = new Intent(ShareActivity.this, SecondActivity.class);
    intent.putExtra("userinfo", "userinfo:" + userInfo.toString());
    startActivity(intent);
}

//一定要停止
@Override
protected void onDestroy() {
    ShareSDK.stopSDK(this);
    super.onDestroy();
}

public void onComplete(Platform platform, int action,
                       HashMap<String, Object> res) {
    if (action == Platform.ACTION_USER_INFOR) {
        Log.e("ShareActivity", platform.getName());
        if (platform.getName().equals("QQ")) {
            mapQQ.clear();
            mapQQ.putAll(res);
        }
        else if (platform.getName().equals("TencentWeibo")) {
            mapSina.clear();
            mapSina.putAll(res);
        }
//            else if (platform.getName().equals("Facebook")) {
//                mapFB.clear();
//                mapFB = res;
//            }
//            else if (platform.getName().equals("GooglePlus")) {
//                mapGG.clear();
//                mapGG = res;
//            }
        UIHandler.sendEmptyMessage(MSG_AUTH_COMPLETE, this);
        login(platform.getName(), platform.getDb().getUserId(), res);
    }
    System.out.println(res);
}

public void onError(Platform platform, int action, Throwable t) {
    if (action == Platform.ACTION_USER_INFOR) {
        UIHandler.sendEmptyMessage(MSG_AUTH_ERROR, this);
    }
    t.printStackTrace();
}

public void onCancel(Platform platform, int action) {
    if (action == Platform.ACTION_USER_INFOR) {
        UIHandler.sendEmptyMessage(MSG_AUTH_CANCEL, this);
    }
}

@Override
public boolean handleMessage(Message message) {
    switch (message.what) {
        case MSG_USERID_FOUND: {
            Toast.makeText(this, R.string.userid_found, Toast.LENGTH_SHORT).show();
        }
        break;
        case MSG_LOGIN: {
            String text = getString(R.string.logining, message.obj);
            Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
        }
        break;
        case MSG_AUTH_CANCEL: {
            Toast.makeText(this, R.string.auth_cancel, Toast.LENGTH_SHORT).show();
        }
        break;
        case MSG_AUTH_ERROR: {
            Toast.makeText(this, R.string.auth_error, Toast.LENGTH_SHORT).show();
        }
        break;
        case MSG_AUTH_COMPLETE: {
            Toast.makeText(this, R.string.auth_complete, Toast.LENGTH_SHORT).show();
        }
        break;
    }
    return false;
    }
}

還有一些string的字符,記得拷貝到string資源里

<string name="app_version">2.0.0</string>
<string name="proj_name">ShareSDK_TPL</string>
<string name="share_sdk">Share SDK</string>
<string name="login_with_sina_weibo">用新浪微博登錄</string>
<string name="login_with_qzone">用QQ空間登錄</string>
<string name="login_with_other_plat">其他帳號(hào)登錄</string>
<string name="userid_found">用戶信息已存在,正在跳轉(zhuǎn)登錄操作…</string>
<string name="logining">使用%s帳號(hào)登錄中…</string>
<string name="auth_cancel">授權(quán)操作已取消</string>
<string name="auth_error">授權(quán)操作遇到錯(cuò)誤,請(qǐng)閱讀Logcat輸出</string>
<string name="auth_complete">授權(quán)成功,正在跳轉(zhuǎn)登錄操作…</string>
<string name="if_register_needed">如果您需要注冊(cè)功能…</string>
<string name="after_auth">一般來說第三方登錄時(shí),第三方平臺(tái)已經(jīng)為您完成用戶身份校驗(yàn),您可以放心讓用戶登錄。\n\n但如果您需要判斷用戶是否為新用戶,可以在授權(quán)操作完成后,將用戶的信息通過字段“HashMap userInfo”攜帶給login方法??蛻舳送ㄟ^“String userId”執(zhí)行登錄請(qǐng)求,如果服務(wù)端判定此userId為未注冊(cè)用戶,可以將userInfo發(fā)送給注冊(cè)接口,獲取用戶在此平臺(tái)上的昵稱、頭像等數(shù)據(jù),然后執(zhí)行注冊(cè)</string>
<string name="ok">確定</string>

還有第二個(gè)activity,用來顯示獲取到的個(gè)人數(shù)據(jù)的 ,只有一個(gè)textview

package com.example.yukun.webapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    TextView tv = (TextView) this.findViewById(R.id.tv);
    String text = getIntent().getStringExtra("userinfo");
    tv.setText(text);
}
}

效果圖如下所示:
其中獲取到的userInfo是map集合,具體的解析過程,可以在網(wǎng)上查查,解析出Map里面的個(gè)人信息
qq的個(gè)人信息


微博的個(gè)人信息

對(duì)于其他的,可以照葫蘆畫瓢,一樣可以完成。(部分代碼參考與網(wǎng)路)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容