社會化分享每一個app必備的推廣需求,不管是拉新,邀請,遊戲獎勵,等等都離不開分享的影子,下面咱們介紹下社會化分享的插件;php
首先要說下,如今的社交App,社區App等,國內外的狀況都是從之前的百花齊放到如今的幾個巨頭,如今可以真正存活下來的或者說用戶羣體大的,也就微信、QQ、微博、Facebook,因此,咱們就簡單的從這幾個平臺的社會化分享集成到app來對比下;android
市面上社會化分享的插件仍是比較多的,好比ShareSDK(Mob),U-Share(友盟+),極光等等,不過用的比較多的如今是ShareSDK的了,畢竟友盟主打的是統計,極光主打的是推送,Mob主打的ShareSDK,不過咱們仍是選取ShareSDK和友盟+對比下;web
集成準備:須要作這幾個平臺的分享,或者第三方登陸,必需要先去對應的第三方開發者或者開放平臺申請對應的應用獲得id或者key等;api
QQ:http://open.qq.com微信
微信:http://open.qq.weixin.com網絡
新浪:http://open.weibo.comapp
Facebook:https://developers.facebook.comide
這個論壇中有申請流程能夠參考一下:測試
http://bbs.mob.com/forum.php?mod=viewthread&tid=275&page=1&extra=#pid860gradle
須要說明的QQ,若是隻須要作分享的話能夠不經過審覈,則登陸須要;
Fb作分享和登陸目前均可以不須要審覈;
微信和新浪必需要經過審覈才能夠,新浪沒經過審覈前能夠測試,可是微信不能夠;
好了上面若是準備好了咱們繼續往下說;
下載地址:https://developer.umeng.com/sdk/android
集成文檔:
https://developer.umeng.com/docs/66632/detail/66639#h1-u96C6u6210u51C6u59073
須要吐槽下,那個自動集成千萬別浪費時間,我找了很久,最後問了客服,那個是統計的,分享的話目前只支持手動集成哦;
首先看下面的圖片,友盟這裏作的仍是不錯的;
如上圖能夠看到,在微博和QQ、微信都作了精簡版,咱們這裏只須要分享顧只下載精簡版便可,具體差別能夠將鼠標放到問號處本身查看;
如今下載完以下圖所示:
這個類是微信規定的,因此必修要放到包名.wxapi目錄下;
QQ和微博不須要添加activity,可是須要在分享和登陸的Activity中添加以下代碼;
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); }
注意onActivityResult不可在fragment中實現,若是在fragment中調用登陸或分享,須要在fragment依賴的Activity中實現
新浪:
<activity android:name="com.umeng.socialize.media.WBShareCallBackActivity" android:configChanges="keyboardHidden|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:exported="false" > </activity> <activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity" android:configChanges="keyboardHidden|orientation" android:exported="false" android:windowSoftInputMode="adjustResize" > </activity> <activity android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" android:launchMode="singleTask" android:name="com.sina.weibo.sdk.share.WbShareTransActivity"> <intent-filter> <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
微信:
<activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
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="tencent100424468" /> </intent-filter> </activity> <activity android:name="com.tencent.connect.common.AssistActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="orientation|keyboardHidden|screenSize"/>
權限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.INTERNET" />
若是須要使用QQ純圖分享或避免其它平臺純圖分享的時候圖片不被壓縮,能夠增長如下權限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Android6.0權限適配
請查看你的build.gradle文件,若是 targetSdkVersion小於或等於22,能夠忽略這一步,若是大於或等於23,須要作權限的動態申請:
if(Build.VERSION.SDK_INT>=23){ String[] mPermissionList = new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.CALL_PHONE,Manifest.permission.READ_LOGS,Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.SET_DEBUG_APP,Manifest.permission.SYSTEM_ALERT_WINDOW,Manifest.permission.GET_ACCOUNTS,Manifest.permission.WRITE_APN_SETTINGS}; ActivityCompat.requestPermissions(this,mPermissionList,123); }
其中123是requestcode,能夠根據這個code判斷,用戶是否贊成了受權。若是沒有贊成,能夠根據回調進行相應處理:
@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { }
好了到這裏就集成完了,雖然是複製複製的,可是仍是有點小麻煩,集成時間大概十分鐘左右;
初始化代碼,Facebook有些特殊,不是在代碼中配置,以下圖所示,文檔還亂了,不吐槽了,理解萬歲;
new ShareAction(MainActivity.this) .setPlatform(SHARE_MEDIA.QQ)//傳入平臺 .withText("hello")//分享內容 .setCallback(shareListener)//回調監聽器 .share();
如上代碼所示,其餘的平臺大同小異,只要換了傳入的平臺對象便可;
下面咱們來看下jar包的大小
umeng-common-1.5.4.jar(公共jar) |
352k(比ShaerSDK小) |
umeng-share-core-6.9.3.jar(Ushare所需) umeng-sharetool-6.9.3.jar(Ushare所需) |
282k(比ShareSDK大) |
umeng-share-facebook-6.9.3.jar |
510k(比ShareSDK大) |
umeng-share-QQ-simplify-6.9.3.jar |
78k(比ShareSDK大) |
umeng-share-sina-simplify-6.9.3.jar |
81k(比ShareSDK大) |
umeng-share-wechat-simplify-6.9.3.jar |
31k(比ShaerSDK小) |
總大小: |
1634k(比ShareSDK大) |
集成文檔:http://wiki.mob.com/sdk-share-android-3-0-0/
ShareSDK採用的是gradle集成的方式,終於不用手動集成了,也不須要下載資源和jar包了,哈哈哈,讓我先笑一會,好了咱們繼續;
classpath "com.mob.sdk:MobSDK:2018.0319.1724"
以後在想要調用分享的模塊中配置以下內容:
apply plugin: 'com.mob.sdk' MobSDK { appKey "d580ad56b4b5" appSecret "7fcae59a62342e7e2759e9e397c82bdd" ShareSDK { //平臺配置信息 devInfo { SinaWeibo { appKey "568898243" appSecret "38a4f8204cc784f81f9f0daaf31e02e3" callbackUri "http://www.sharesdk.cn" shareByAppClient false } Wechat { appId "wx4868b35061f87885" appSecret "64020361b8ec4c99936c0e3999a9f249" } WechatMoments{ appId "wx4868b35061f87885" appSecret "64020361b8ec4c99936c0e3999a9f249" bypassApproval true } QQ { appId "100371282" appKey "aed9b0303e3ed1e27bae87c33761161d" shareByAppClient true } QZone { appId "100371282" appKey "aed9b0303e3ed1e27bae87c33761161d" bypassApproval true } Facebook { appKey "1412473428822331" appSecret "a42f4f3f867dc947b9ed6020c2e93558" callbackUri "https://mob.com" } } } }
如上所示,ShareSDK將微信的幾個平臺,還有QQ和QZone都分開處理了,這樣須要更多的配置了,可是也就更靈活了,不須要的資源徹底能夠不須要加進來了,各有各的好處;
其次,上面的字段的說明,能夠看ShareSDK的集成文檔便可,裏面都有說明;將本身的key申請好後,替換上面默認的便可,而後從新編譯一下,就集成完成了,是的你沒有聽錯,集成完了,不須要加任何jar包,不須要加任何act的配置,gradle的好處大大的體現出來了;
時間成本大大的減小了,而且在回調的配置方面減小了本身的配置上的操做失誤,下降了錯誤的可能性,並且還不須要初始化哦,親測可靠,下面咱們開始調用代碼分享吧;
Platform.ShareParams sp = new Platform.ShareParams(); sp.setTitle("測試分享的標題"); sp.setTitleUrl("http://sharesdk.cn"); // 標題的超連接 sp.setText("測試分享的文本"); sp.setImageUrl("http://www.someserver.com/測試圖片網絡地址.jpg"); sp.setSite("發佈分享的網站名稱"); sp.setSiteUrl("發佈分享網站的地址"); Platform qzone = ShareSDK.getPlatform (QZone.NAME); // 設置分享事件回調(注:回調放在不能保證在主線程調用,不能夠在裏面直接處理UI操做) qzone.setPlatformActionListener (new PlatformActionListener() { public void onError(Platform arg0, int arg1, Throwable arg2) { //失敗的回調,arg:平臺對象,arg1:表示當前的動做,arg2:異常信息 } public void onComplete(Platform arg0, int arg1, HashMap arg2) { //分享成功的回調 } public void onCancel(Platform arg0, int arg1) { //取消分享的回調 } }); // 執行圖文分享 qzone.share(sp);
如上所示,代碼調用完成,不一樣的平臺更換不一樣的第三方對象便可,能夠在快速集成文檔中查看,而後就是分享類型,也能夠在文檔中查看《各平臺分享內容說明》
785K
MobTools-2018.0911.1425.jar MobCommons-2018.0918.1444.jar(公共jar) |
464k(比Ushare大) |
ShareSDK-Core-3.3.0.jar |
120k(比Ushare小) |
ShareSDK-QQ-3.3.0.jar ShareSDK-QZone-3.3.0.jar |
74k(比Ushare小) |
ShareSDK-SinaWeibo-3.3.0.jar |
70k(比Ushare小) |
ShareSDK-Wechat-3.3.0.jar ShareSDK-Wechat-Core-3.3.0.jar ShareSDK-Wechat-Moments-3.3.0.jar |
57k(比Ushare大) |
ShareSDK-Facebook-3.3.0.jar |
36k(比Ushare小) |
總大小: |
821k |
對比項 |
Ushare |
ShareSDK |
集成時間 |
10min |
2min |
集成jar包的大小 |
1634k(fb的jar太大) |
821k |
集成方式 |
手動jar包集成 |
Gradle集成 |
配置項 |
配置的比較多(畢竟不是gradle集成) |
配置項比較少,節省時間 |
客服(滿分10分) |
6分(無技術客服,而且回覆比較慢) |
9分(有技術客服,回覆較快) |
更新週期 |
平均三個月更新一次 |
平均一個多月更新一次 |
須要說明的是大小問題,雖然jar包對比差了一倍,可是U-share的fb的jar比較大,若是不集成fb的狀況下,二者相差很少;