整合一個以官網(微信,QQ,微博)為標準的登入分享功能

語言: CN / TW / HK

本文正在參加「金石計劃 . 瓜分6萬現金大獎」

Hello,各位老鐵,今天要分享的是一個老生常談的一個功能,也是網上一搜一大片的技術點,沒什麼技術含量,就是整合一下,提供一下方便,相對於友盟,ShareSdk中夾雜著一些別的功能,此文封裝的絕對純淨,除了官網所提供的,不夾雜任何的程式碼邏輯,登入就是登入,分享就是分享,實實在在的以官網為標準。

目前已經上傳到了GitHub,地址是:

http://github.com/AbnerMing888/AndroidShare

image.png

大家可以下載依賴使用,也可以maven遠端使用。由於特別簡單,本文概述如下:

1、使用步驟

2、功能具體呼叫

3、其他注意事項

4、總結

一、使用步驟

第一步,根專案下build.gradle

repositories { …… maven { url "http://gitee.com/AbnerAndroid/android-maven/raw/master" } }

第二步,在需要的module下build.gradle

implementation 'com.abner:share:1.0.0'

第三步,初始化,傳自己申請的微信,QQ,微博資訊

kotlin ShareUtils.get().initShare( this, BuildConfig.WX_ID, BuildConfig.QQ_ID, BuildConfig.WB_KEY )

第四步,清單檔案註冊,WXEntryActivity需要在wxapi包下建立,一定要按照標準,可直接複製Demo中的,tencent1112002456是填自己申請的。

```xml

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />


            <data android:scheme="tencent1112002456" />
        </intent-filter>
    </activity>

```

二、功能具體呼叫

具體的功能呼叫,大家可以直接參考Demo中的MainActivity,或參照下面。

QQ登入

kotlin ShareUtils.get() .login(this, ShareUtils.QQ) .setOnQqCallBackListener({ //登入成功 Toast.makeText(this, it.toString(), Toast.LENGTH_LONG).show() }, { //登入失敗 })

微信登入,回撥在WXEntryActivity類中

kotlin ShareUtils.get().login(this, ShareUtils.WEIXIN)

微博登入

kotlin ShareUtils.get().login(this, ShareUtils.WEIBO) .setOnWbCallBackListener({ //成功 Toast.makeText(this, "微博登入成功", Toast.LENGTH_LONG).show() }, { //失敗 })

QQ好友分享連結

kotlin //注意,圖片地址需要自己生成,這裡我使用的是簡單的測試 val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile val imagePath = "$absoluteFile/ic_launcher.png" ShareUtils.get().qwShareUrl( this, ShareUtils.QQ, "我是測試分享標題", "我是測試分享連結", "http://www.vipandroid.cn/ming/page/open.html", imagePath, ).setOnQqCallBackListener({ Log.e(TAG, "分享成功") }, { Log.e(TAG, "分享失敗") })

QQ好友分享圖片

kotlin //注意,圖片地址需要自己生成,這裡我使用的是簡單的測試 val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile val imagePath = "$absoluteFile/ic_launcher.png" ShareUtils.get().qwShareImage( this, ShareUtils.QQ, imagePath, ).setOnQqCallBackListener({ Log.e(TAG, "分享成功") }, { Log.e(TAG, "分享失敗") })

QQ空間分享連結

kotlin //注意,圖片地址需要自己生成,這裡我使用的是簡單的測試 val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile val imagePath = "$absoluteFile/ic_launcher.png" ShareUtils.get().qwShareUrl( this, ShareUtils.QQ, "我是測試分享標題", "我是測試分享連結", "http://www.vipandroid.cn/ming/page/open.html", imagePath, ShareUtils.SCENE )

QQ空間分享圖片

kotlin //注意,圖片地址需要自己生成,這裡我使用的是簡單的測試 val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile val imagePath = "$absoluteFile/ic_launcher.png" ShareUtils.get().qwShareImage( this, ShareUtils.QQ, imagePath, ShareUtils.SCENE ).setOnQqCallBackListener({ Log.e(TAG, "分享成功") }, { Log.e(TAG, "分享失敗") })

微博分享圖片

kotlin //注意,圖片地址需要自己生成,這裡我使用的是簡單的測試 val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile val imagePath = "$absoluteFile/ic_launcher.png" ShareUtils.get().qwShareImage(this, ShareUtils.WEIBO, imagePath)

微博分享連結

kotlin //注意,圖片地址需要自己生成,這裡我使用的是簡單的測試 val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile val imagePath = "$absoluteFile/ic_launcher.png" ShareUtils.get().qwShareUrl( this, ShareUtils.WEIBO, "我是測試標題", "我是測試描述", "http://www.vipandroid.cn", imagePath )

微信好友分享連結

kotlin //注意,圖片地址需要自己生成,這裡我使用的是簡單的測試 val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile val imagePath = "$absoluteFile/ic_launcher.png" ShareUtils.get().qwShareUrl( this, ShareUtils.WEIXIN, "我是測試標題", "我是測試描述", "http://www.vipandroid.cn", imagePath )

微信好友分享圖片

kotlin //注意,圖片地址需要自己生成,這裡我使用的是簡單的測試 val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile val imagePath = "$absoluteFile/ic_launcher.png" ShareUtils.get().qwShareImage(this, ShareUtils.WEIXIN, imagePath)

微信朋友圈分享連結

kotlin //注意,圖片地址需要自己生成,這裡我使用的是簡單的測試 val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile val imagePath = "$absoluteFile/ic_launcher.png" ShareUtils.get().qwShareUrl( this, ShareUtils.WEIXIN, "我是測試標題", "我是測試描述", "http://www.vipandroid.cn", imagePath, ShareUtils.SCENE )

微信朋友圈分享圖片

kotlin //注意,圖片地址需要自己生成,這裡我使用的是簡單的測試 val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile val imagePath = "$absoluteFile/ic_launcher.png" ShareUtils.get().qwShareImage(this, ShareUtils.WEIXIN, imagePath, ShareUtils.SCENE)

三、其他注意事項

回撥

```kotlin override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (data != null) { //QQ回撥 ShareUtils.get().onQqActivityResult(requestCode, resultCode, data) //微博回撥 ShareUtils.get().onWbShareActivityResult(data, object : WbShareCallback { override fun onComplete() {

            }


            override fun onError(p0: UiError?) {
            }


            override fun onCancel() {


            }


        })
    }


}

```

WXEntryActivity

用於接收微信登入或分享後的狀態回撥,可以在這裡做一些其他的操作。

```kotlin class WXEntryActivity : Activity(), IWXAPIEventHandler {

private var mIWXAPI: IWXAPI? = null


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    mIWXAPI = WXAPIFactory.createWXAPI(this, BuildConfig.WX_ID)
    mIWXAPI!!.handleIntent(intent, this)
}


override fun onNewIntent(intent: Intent?) {
    super.onNewIntent(intent)
    setIntent(intent)
    mIWXAPI!!.handleIntent(intent, this)
}


override fun onReq(resp: BaseReq?) {


}


override fun onResp(resp: BaseResp?) {
    when (resp!!.errCode) {
        BaseResp.ErrCode.ERR_OK -> {
            if (resp.type == ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX) {
                //分享,做一些其他操作


                finish()
            } else if (resp.type == ConstantsAPI.COMMAND_SENDAUTH) { //登陸
                val code = (resp as SendAuth.Resp).code
                Toast.makeText(this, "微信登入成功", Toast.LENGTH_LONG).show()


                //根據code,和服務端進行繫結,獲取資訊後執行後續操作


                finish()
            }
        }
        else -> {
            finish()
        }
    }
}

} ```

混淆策略

``` -keep class com.tencent.mm.opensdk.* {;}

-keep class com.tencent.wxop.* {;}

-keep class com.tencent.mm.sdk.* {;}

-keep class * extends android.app.Dialog ```

四、總結

關於文中的分享圖片地址,大家記得改為自己要分享的圖片地址,QQ的ID,微信的ID,微博的KEY一定要設定自己申請的,並且要和應用包名,簽名信息保持一致的。