目前幾乎全部app都包含了第三方的登陸以及分享功能,以前大多都使用ShareSDK或者其餘SDK來實現,可是有些狀況不但願經過第三方的sdk來間接集成,因此這個組件就有了用武之地。java
這個組件在demo中是沒有包含相關調用的代碼的只有一些配置和使用的東西,由於應用的申請實在麻煩,可是已經在項目中測試經過了,因此能夠放心使用。android
項目地址git
包含了:如何引用、使用以及混淆github
一、在根目錄的build.gradle中加入以下配置express
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
maven { url "https://dl.bintray.com/thelasterstar/maven/" }
}
}
複製代碼
二、在要是用的module中增長以下引用apache
dependencies {
...
compile 'com.github.arvinljw:SocialHelper:v1.0.4'
}
複製代碼
注:若是在該module中使用了v7包,那麼可以使用exclude命令移除本庫的引用避免重複,gson也是同樣,大致方法以下api
compile ('com.github.arvinljw:SocialHelper:v1.0.4'){
exclude group: 'com.android.support'
}
複製代碼
一、相應配置bash
AndroidManifest.xml配置微信
添加權限app
<!--微信權限,微博權限,qq只需前兩個-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
複製代碼
在application下添加Activity
<!--qq配置開始-->
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="tencentqqAppId"/>
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
<!--qq配置結束-->
<!--微信配置開始-->
<activity
android:name=".wxapi.WXEntryActivity"
android:exported="true"
android:label="@string/app_name"
/>
<!--微信配置結束-->
<!--微博不須要-->
複製代碼
注:其中須要注意的是,qq配置中 qqAppId換成您申請的qqAppId便可
微信還須要在packageName.wxapi的包下建立WXEntryActivity,具體實現可在這裏查看
拷貝過去便可,注意路徑,其中主要的處理是在其onResp的時候判斷是登陸仍是分享作出相應的處理,通知本庫觸發回調
二、獲取實例
首先採用外觀模式,暴露出來一個SocialHelper,能夠經過構建者模式獲取實例,調用相關方法,配置回調。
socialHelper = new SocialHelper.Builder()
.setQqAppId("qqAppId")
.setWxAppId("wxAppId")
.setWxAppSecret("wxAppSecret")
.setWbAppId("wbAppKey")
.setWbRedirectUrl("wbRedirectUrl")
.build();
複製代碼
三、調用相關方法
這裏提供了QQ、微信和微博的相應的登陸和分享方法
這個其實經過名字就能知道是什麼意思,就不解釋了,須要解釋的是參數:
a、傳入的Activity
主要是爲了回調回來都在當前Activity中處理回調事情,避免在Fragment中去處理,這樣也能減小一些工做
注:固然遇到在Fragment中調用登陸或者分享的時候,請使用您最熟悉的方式回調到其Activity中處理相關操做
b、傳入的回調
這裏回調也分爲了兩種登陸回調和分享回調
回調接口以下:
public interface SocialCallback {
void socialError(String msg);
}
public interface SocialLoginCallback extends SocialCallback{
void loginSuccess(ThirdInfoEntity info);
}
public interface SocialShareCallback extends SocialCallback{
void shareSuccess();
}
複製代碼
登陸和分享回調失敗都會有一個信息返回;
登陸成功會將封裝的第三方信息返回,包含了經常使用的暱稱,性別,頭像,登陸平臺,更多信息也能在其中找到,詳細的含義在Lib中有詳細的註釋;
分享成功就只有一個回調,便於提示。
c、ShareEntity
這個參數是分享的重點,對於QQ、微信和微博對應着QQShareEntity、WXShareEntity以及WBShareEntity
均可以經過其相應的靜態方法建立相應分享類型
QQShareEntity
WXShareEntity
WBShareEntity
具體詳細的參數以及註釋在相應類中都有明確的註釋,這裏就不過多的展開了;其中有ParamsRequired註解的參數表明必傳。
注意,有些沒必要傳的參數,不傳雖然也能分享成功,可是有可能會影響分享出去的樣式,請自行調試。
四、回調配置
在調用的Activity中配置
//用處:qq登陸和分享回調,以及微博登陸回調
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data != null && socialHelper != null) {//qq分享若是選擇留在qq,經過home鍵退出,再進入app則不會有回調
socialHelper.onActivityResult(requestCode, resultCode, data);
}
}
//用處:微博分享回調
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (socialHelper != null) {
socialHelper.onNewIntent(intent);
}
}
複製代碼
至於微信的回調配置,在一開始的時候說的WXEntryActivity的onResp中的處理就是了。
至此使用方式就基本完畢,算下來也就這麼四部配置,就能愉快的使用了,固然前提是相應的app申請已經成功。
其中對於SocialHelper的實例,能夠像Demo中同樣使用一個工具簡單封裝成單例來使用。
#qq
-keep class com.tencent.**{*;}
#微博
-keep class com.sina.weibo.sdk.** { *; }
#微信
-keep class com.tencent.mm.opensdk.** { *; }
-keep class packageName.wxapi.** { *; }
#Gson
-keep class com.google.gson.** {*;}
-keep class com.google.**{*;}
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
-keep class com.google.gson.examples.android.model.** { *; }
#Socialhelper
-keep class net.arvin.socialhelper.**{*;}
複製代碼
注:微信的packageName換成本身的包名
如果有什麼好的建議或者問題,請多多指教,感激涕零。
待作事項
Copyright 2017 arvinljw
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
複製代碼