整合一個以官網(微信,QQ,微博)為標準的登入分享功能
本文正在參加「金石計劃 . 瓜分6萬現金大獎」
Hello,各位老鐵,今天要分享的是一個老生常談的一個功能,也是網上一搜一大片的技術點,沒什麼技術含量,就是整合一下,提供一下方便,相對於友盟,ShareSdk中夾雜著一些別的功能,此文封裝的絕對純淨,除了官網所提供的,不夾雜任何的程式碼邏輯,登入就是登入,分享就是分享,實實在在的以官網為標準。
目前已經上傳到了GitHub,地址是:
http://github.com/AbnerMing888/AndroidShare
大家可以下載依賴使用,也可以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一定要設定自己申請的,並且要和應用包名,簽名信息保持一致的。
- Android自動生成程式碼,視覺化腳手架之基礎資訊配置
- 如何搞一個線上的Shape生成
- 簡單封裝一個易拓展的Dialog
- 整合一個以官網(微信,QQ,微博)為標準的登入分享功能
- Android打造專有Hook第四篇,實戰增量程式碼規範檢查
- Android極簡MVVM,從一個基類庫談起
- Android元件化開發,其實就這麼簡單
- Android打造專有hook,讓不規範的程式碼扼殺在萌芽之中
- Android包體積過大,真的會影響績效
- Android長按圖示展示快捷方式
- Android自動生成Shape資原始檔(下)
- Android自動生成Shape資原始檔,邁出視覺化腳手架第一步!(上)
- Android自動生成程式碼,視覺化腳手架,將大大提高開發效率
- Android自動生成程式碼,視覺化腳手架之環境搭建
- 怎麼去約束程式碼的統一性
- 沒有準備充分,先不要著急投簡歷
- Android如何生成本地或者遠端aar