Android使用shareSDK快速集成第三方登錄-微信

網上有很多類似文章,但是如果你按着步驟去實際集成的時候就會發現種小問題,而且調試類似小問題還會耗費很多時間,在此前提下,我根據官方文檔(雖然不是很全),自己實際操作了一把,以便給各位網友借鑑。

步驟一:首先從shareSDK官網註冊賬號並進行認證,再創建應用就會得到App Key和App Secret

步驟二:點擊shareSDK首頁SDK下載

 

 

 勾選shareSDK

 

 

 

會彈出如下頁面

 

 

 可以默認,當然也可以根據實際需要選擇社交平臺,再點擊保存配置

然後再點擊下載

 

 

 會彈出如下頁面

 

 

 注意上面標紅的部分,這部分添加到“”“”根“”“模塊build.gradle中(我就是添加錯了,搞了好長時間)

buildscript {
    repositories {
        jcenter()
    }
    
    dependencies {
        // 註冊MobSDK
        classpath "com.mob.sdk:MobSDK:2018.0319.1724"
    }
}

注意在使用”“”“”“相應模塊”“”“”“”“的build.gradle中,添加MobSDK插件和擴展,如:

apply plugin: 'com.mob.sdk'

MobSDK {
    appKey "替換爲mob官方申請的appkey"
    appSecret "替換爲mob官方申請的appkey對應的appSecret"
    ShareSDK {
        loopShare true
        devInfo {
            SinaWeibo {
                appKey "568898243"
                appSecret "38a4f8204cc784f81f9f0daaf31e02e3"
                callbackUri "http://www.sharesdk.cn"
            }
            Wechat {
                appId "wx4868b35061f87885"
                appSecret "64020361b8ec4c99936c0e3999a9f249"
                userName "gh_afb25ac019c9"
                path "pages/index/index.html?id=1"
                withShareTicket true
                miniprogramType 2
            }
            QQ {
                appId "100371282"
                appKey "aed9b0303e3ed1e27bae87c33761161d"
            }
            Facebook {
                appKey "1412473428822331"
                appSecret "a42f4f3f867dc947b9ed6020c2e93558"
                callbackUri "https://mob.com"
            }
            Twitter {
                appKey "LRBM0H75rWrU9gNHvlEAA2aOy"
                appSecret "gbeWsZvA9ELJSdoBzJ5oLKX0TU09UOwrzdGfo9Tg7DjyGuMe8G"
                callbackUri "http://mob.com"
            }
            ShortMessage {}
            LinkedIn {
                appKey "ejo5ibkye3vo"
                appSecret "cC7B2jpxITqPLZ5M"
                callbackUri "http://www.sharesdk.cn"
            }
            Douyin {
                appKey "aw9ivykfjvi4hpwo"
                appSecret "42b4caa6bda60bd49f05f06d0a4956e1"
            }
            FacebookMessenger {
                appId "107704292745179"
            }
            WhatsApp {}
            WechatMoments {
                appId "wx4868b35061f87885"
                appSecret "64020361b8ec4c99936c0e3999a9f249"
            }
            WechatFavorite {
                appId "wx4868b35061f87885"
                appSecret "64020361b8ec4c99936c0e3999a9f249"
            }
        }
    }
}

注意將紅色部分替換成你申請的App Key和App Secret

 

步驟三:在項目目錄中創建如下文件 wxapi.WXEntryActivity 必須是這樣的目錄,沒有商量

 

WXEntryActivity .java代碼如下

 

import android.content.Intent;
import android.widget.Toast;

import cn.sharesdk.wechat.utils.WXAppExtendObject;
import cn.sharesdk.wechat.utils.WXMediaMessage;
import cn.sharesdk.wechat.utils.WechatHandlerActivity;

/** 微信客戶端回調activity示例 */
public class WXEntryActivity extends WechatHandlerActivity {

    /**
     * 處理微信發出的向第三方應用請求app message
     * <p>
     * 在微信客戶端中的聊天頁面有“添加工具”,可以將本應用的圖標添加到其中
     * 此後點擊圖標,下面的代碼會被執行。Demo僅僅只是打開自己而已,但你可
     * 做點其他的事情,包括根本不打開任何頁面
     */
    public void onGetMessageFromWXReq(WXMediaMessage msg) {
        Intent iLaunchMyself = getPackageManager().getLaunchIntentForPackage(getPackageName());
        startActivity(iLaunchMyself);
    }

    /**
     * 處理微信向第三方應用發起的消息
     * <p>
     * 此處用來接收從微信發送過來的消息,比方說本demo在wechatpage裏面分享
     * 應用時可以不分享應用文件,而分享一段應用的自定義信息。接受方的微信
     * 客戶端會通過這個方法,將這個信息發送回接收方手機上的本demo中,當作
     * 回調。
     * <p>
     * 本Demo只是將信息展示出來,但你可做點其他的事情,而不僅僅只是Toast
     */
    public void onShowMessageFromWXReq(WXMediaMessage msg) {
        if (msg != null && msg.mediaObject != null
                && (msg.mediaObject instanceof WXAppExtendObject)) {
            WXAppExtendObject obj = (WXAppExtendObject) msg.mediaObject;
            Toast.makeText(this, obj.extInfo, Toast.LENGTH_SHORT).show();
        }
    }

}

步驟四:開始調用,在你要調用的actitvity中實現接口implements PlatformActionListener, Handler.Callback

在你點擊微信登錄按鈕中添加如下代碼
 Platform wechat = ShareSDK.getPlatform(Wechat.NAME);
                wechat.setPlatformActionListener(this);
                wechat.SSOSetting(false);
                authorize(wechat, 1);

並將如下方法粘貼到你的actitvity類中

    //授權
    private void authorize(Platform plat, int type) {
        switch (type) {
            case 1:
                showProgressDialog("testwx");
                break;
            case 2:
                showProgressDialog("testwx");
                break;
            case 3:
                showProgressDialog("testwx");
                break;
        }
        if (plat.isAuthValid()) { //如果授權就刪除授權資料
            plat.removeAccount(true);
        }
        plat.showUser(null);//授權並獲取用戶信息
    }

    //登陸授權成功的回調
    @Override
    public void onComplete(Platform platform, int i, HashMap<String, Object> res) {
        Message msg = new Message();
        msg.what = MSG_ACTION_CCALLBACK;
        msg.arg1 = 1;
        msg.arg2 = 1;
        msg.obj = platform;
        UIHandler.sendMessage(msg, this);   //發送消息

    }

    //登陸授權錯誤的回調
    @Override
    public void onError(Platform platform, int i, Throwable t) {
        Message msg = new Message();
        msg.what = MSG_ACTION_CCALLBACK;
        msg.arg1 = 2;
        msg.arg2 = 2;
        msg.obj = t;
        UIHandler.sendMessage(msg, this);
    }

    //登陸授權取消的回調
    @Override
    public void onCancel(Platform platform, int i) {
        Message msg = new Message();
        msg.what = MSG_ACTION_CCALLBACK;
        msg.arg1 = 3;
        msg.arg2 = 3;
        msg.obj = platform;
        UIHandler.sendMessage(msg, this);
    }

    //登陸發送的handle消息在這裏處理
    @Override
    public boolean handleMessage(Message message) {
        hideProgressDialog();
        switch (message.arg1) {
            case 1: { // 成功
//                Toast.makeText(LoginActivity.this, "授權登陸成功", Toast.LENGTH_SHORT).show();

                //獲取用戶資料
                Platform platform = (Platform) message.obj;
                String userId = platform.getDb().getUserId();//獲取用戶賬號
                String userName = platform.getDb().getUserName();//獲取用戶名字
                String userIcon = platform.getDb().getUserIcon();//獲取用戶頭像
                String userGender = platform.getDb().getUserGender(); //獲取用戶性別,m = 男, f = 女,如果微信沒有設置性別,默認返回null
                Toast.makeText(MainActivity.this, "用戶信息爲--用戶名:" + userName + "  性別:" + userGender, Toast.LENGTH_SHORT).show();

                //下面就可以利用獲取的用戶信息登錄自己的服務器或者做自己想做的事啦!
                //。。。

            }
            break;
            case 2: { // 失敗
                Toast.makeText(MainActivity.this, "授權登陸失敗", Toast.LENGTH_SHORT).show();
            }
            break;
            case 3: { // 取消
                Toast.makeText(MainActivity.this, "授權登陸取消", Toast.LENGTH_SHORT).show();
            }
            break;
        }
        return false;
    }

    //顯示dialog
    public void showProgressDialog(String message) {
        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage(message);
        progressDialog.setCancelable(true);
        progressDialog.show();
    }

    //隱藏dialog
    public void hideProgressDialog() {
        if (progressDialog != null)
            progressDialog.dismiss();
    }
注意下面變量放到你的類中
private static final int MSG_ACTION_CCALLBACK = 0;
private ProgressDialog progressDialog;

 


步驟五:AndroidManifest.xml 添加如下配置

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

            <!-- 調用新浪原生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>

            <!--集成line客戶端登錄授權,需要添如下格式的過濾器-->
            <intent-filter>
                <data android:scheme="line.1477692153" />
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

        </activity>
        <!-- 填寫您從Mob開發者後臺中得到的Appkey和AppSecret -->
        <meta-data android:name="Mob-AppKey" android:value="aaaaaaaaaaa"/>
        <meta-data android:name="Mob-AppSecret" android:value="bbbbbbbbbefdbbbbbbbbbbbbbb"/>


        <!--微信分享回調 -->
        <activity
            android:name=".wxapi.WXEntryActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait" />
<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"/>
    <!-- 藍牙分享所需的權限 -->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.INTERNET" />

紅色部分換成你上面申請的




上面操作完成後就可以調用了,NO NO

步驟六:配置簽名

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 創建完成後,按ctrl+alt+shit+s 打開項目設置窗口,將生成的testkey.jks配置到項目裏面

 

這裏面的密碼就是你前面設置的密碼

然後再找到你的teskkey.jks 的MD5簽名,配置到微信平臺

在這裏查看

 

 雙擊”signingDependencies“

 

 然後將MD5簽名去冒號,變小寫配置到微信平臺,登錄到你的微信開放平臺,修改開發信息配置上面的簽名,及包名,如下所示

 

 完成以上配置就可以正常調用了,有圖有真像

 



參考我創建的類
package com.sangmp.mobileapp;

import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Toast;

import com.azhon.basic.base.BaseNoModelActivity;
import com.mob.tools.utils.UIHandler;
import com.sangmp.mobileapp.databinding.ActivityMainBinding;
import com.sangmp.mobileapp.detail.DetailActivity;
import com.sangmp.mobileapp.lazy.LazyActivity;
import com.sangmp.mobileapp.linkage.LinkageActivity;
import com.sangmp.mobileapp.news.NewsActivity;

import java.util.HashMap;

import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.wechat.friends.Wechat;

public class MainActivity extends BaseNoModelActivity<ActivityMainBinding> implements PlatformActionListener, Handler.Callback {

    private static final int MSG_ACTION_CCALLBACK = 0;
    private ProgressDialog progressDialog;
    @Override
    protected int onCreate() {
        return R.layout.activity_main;

    }


    @Override
    protected void initView() {

    }

    @Override
    protected void initData() {
        dataBinding.setModel(this);
    }

    /**
     * 按鈕點擊事件
     */
    public void item(View view, int position) {
        switch (position) {
            case 0:
                Platform wechat = ShareSDK.getPlatform(Wechat.NAME);
                wechat.setPlatformActionListener(this);
                wechat.SSOSetting(false);
                authorize(wechat, 1);
break;
        }
    }


    //授權
    private void authorize(Platform plat, int type) {
        switch (type) {
            case 1:
                showProgressDialog("testwx");
                break;
            case 2:
                showProgressDialog("testqq");
                break;
            case 3:
                showProgressDialog("testwb");
                break;
        }
        if (plat.isAuthValid()) { //如果授權就刪除授權資料
            plat.removeAccount(true);
        }
        plat.showUser(null);//授權並獲取用戶信息
    }

    //登陸授權成功的回調
    @Override
    public void onComplete(Platform platform, int i, HashMap<String, Object> res) {
        Message msg = new Message();
        msg.what = MSG_ACTION_CCALLBACK;
        msg.arg1 = 1;
        msg.arg2 = 1;
        msg.obj = platform;
        UIHandler.sendMessage(msg, this);   //發送消息

    }

    //登陸授權錯誤的回調
    @Override
    public void onError(Platform platform, int i, Throwable t) {
        Message msg = new Message();
        msg.what = MSG_ACTION_CCALLBACK;
        msg.arg1 = 2;
        msg.arg2 = 2;
        msg.obj = t;
        UIHandler.sendMessage(msg, this);
    }

    //登陸授權取消的回調
    @Override
    public void onCancel(Platform platform, int i) {
        Message msg = new Message();
        msg.what = MSG_ACTION_CCALLBACK;
        msg.arg1 = 3;
        msg.arg2 = 3;
        msg.obj = platform;
        UIHandler.sendMessage(msg, this);
    }

    //登陸發送的handle消息在這裏處理
    @Override
    public boolean handleMessage(Message message) {
        hideProgressDialog();
        switch (message.arg1) {
            case 1: { // 成功
//                Toast.makeText(LoginActivity.this, "授權登陸成功", Toast.LENGTH_SHORT).show();

                //獲取用戶資料
                Platform platform = (Platform) message.obj;
                String userId = platform.getDb().getUserId();//獲取用戶賬號
                String userName = platform.getDb().getUserName();//獲取用戶名字
                String userIcon = platform.getDb().getUserIcon();//獲取用戶頭像
                String userGender = platform.getDb().getUserGender(); //獲取用戶性別,m = 男, f = 女,如果微信沒有設置性別,默認返回null
                Toast.makeText(MainActivity.this, "用戶信息爲--用戶名:" + userName + "  性別:" + userGender, Toast.LENGTH_SHORT).show();

                //下面就可以利用獲取的用戶信息登錄自己的服務器或者做自己想做的事啦!
                //。。。

            }
            break;
            case 2: { // 失敗
                Toast.makeText(MainActivity.this, "授權登陸失敗", Toast.LENGTH_SHORT).show();
            }
            break;
            case 3: { // 取消
                Toast.makeText(MainActivity.this, "授權登陸取消", Toast.LENGTH_SHORT).show();
            }
            break;
        }
        return false;
    }

    //顯示dialog
    public void showProgressDialog(String message) {
        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage(message);
        progressDialog.setCancelable(true);
        progressDialog.show();
    }

    //隱藏dialog
    public void hideProgressDialog() {
        if (progressDialog != null)
            progressDialog.dismiss();
    }

}

 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章