在APP中,社會化分享已經成爲了一項重要的引流措施,通過分享到QQ微信等社交平臺,吸引更多的用戶使用APP是一項常見的方案,下面,我們就來一步一步地實現在APP中集成社會化分享的功能
實現步驟
1.首先,你需要在友盟的官網註冊申請賬號,並創建你自己的APP,這一步比較簡單,在這裏不再說明,基本上每個安卓開發者都會做,裏面也沒有什麼需要注意的坑,只要按照上面的提示來做就可以了
2.下載最新版的SDK,目前,友盟的分享SDK支持手動集成,這一點需要注意,下載完之後,解壓後你會得到相應的文件夾
按照你的項目,吧解壓出來的文件夾裏面的東西,全部放在你的項目中的對應的文件夾下就可以了
3.在你的包名下創建文件夾wxapi,並創建類繼承WXCallbackActivity(這裏一定是包名下,不能是其他任何一個二級目錄,否則將會分享失敗),支付寶(apshare)和釘釘(ddshare)類似,需要創建相應的文件夾(apshare)和(ddshare),並分別繼承(ShareCallbackActivity)和(DingCallBack)
QQ與新浪不需要添加Activity,但需要在使用QQ分享或者授權的Activity中,添加以下代碼,獲取分享的回調
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
4.在Android Manifest XML文件中添加相應的配置
新浪
<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" />
支付寶
<activity
android:name=".apshare.ShareEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
釘釘
<activity
android:name=".ddshare.DingCallBack"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
QQ(需要更換爲你自己的android:scheme)
<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"/>
分享編輯頁(只有豆瓣,人人,騰訊微博,領英,twitter需要):
<activity
android:name="com.umeng.socialize.editorpage.ShareActivity"
android:theme="@android:style/Theme.NoTitleBar"
android:excludeFromRecents="true"
/>
5.分享因爲有時候涉及到圖片和視頻等,所以需要讀寫sd卡的權限,雖然官方提供了模板代碼.但是在實際的項目中一般都會有加入申請權限的一系列代碼,大家可以根據自己的項目中的具體情況去申請,沒必要將文檔中的所有權限都加入進來,造成對用戶的不必要困擾
6.等一切集成完畢之後,你就可以初始化SDK了,初始化的操作一般放在Application中進行
@Override
public void onCreate() {
super.onCreate();
UMConfigure.init(this,"5a12384aa40fa3551f0001d1"
,"umeng",UMConfigure.DEVICE_TYPE_PHONE,"");//58edcfeb310c93091c000be2 5965ee00734be40b580001a0
}
配置平臺key
PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");
//豆瓣RENREN平臺目前只能在服務器端配置
PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com");
PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi", "MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");
PlatformConfig.setAlipay("2015111700822536");
PlatformConfig.setLaiwang("laiwangd497e70d4", "d497e70d4c3e4efeab1381476bac4c5e");
PlatformConfig.setPinterest("1439206");
PlatformConfig.setKakao("e4f60e065048eb031e235c806b31c70f");
PlatformConfig.setDing("dingoalmlnohc0wggfedpk");
PlatformConfig.setVKontakte("5764965","5My6SNliAaLxEm3Lyd9J");
PlatformConfig.setDropbox("oz8v5apet3arcdy","h7p2pjbzkkxt02a");
PlatformConfig.setYnote("9c82bf470cba7bd2f1819b0ee26f86c6ce670e9b");
6.因爲分享需要正式環境下才能使用,爲了平時方便開發,需要配置一下簽名文件7.下面就可以寫分享的代碼了,你可以寫在一個工具類中,方便調用
分享(帶面板)
new ShareAction(MainActivity.this).withText("hello") .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN)
.setCallback(umShareListener).open();
分享(不帶面板)
new ShareAction(MainActivity.this)
.setPlatform(SHARE_MEDIA.QQ)//傳入平臺
.withText("hello")//分享內容
.setCallback(umShareListener)//回調監聽器
.share();
其中umShareListener爲回調監聽
private UMShareListener shareListener = new UMShareListener() {
/**
* @descrption 分享開始的回調
* @param platform 平臺類型
*/
@Override
public void onStart(SHARE_MEDIA platform) {
}
/**
* @descrption 分享成功的回調
* @param platform 平臺類型
*/
@Override
public void onResult(SHARE_MEDIA platform) {
Toast.makeText(ShareDetailActivity.this,"成功 了",Toast.LENGTH_LONG).show();
}
/**
* @descrption 分享失敗的回調
* @param platform 平臺類型
* @param t 錯誤原因
*/
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(ShareDetailActivity.this,"失 敗"+t.getMessage(),Toast.LENGTH_LONG).show();
}
/**
* @descrption 分享取消的回調
* @param platform 平臺類型
*/
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(ShareDetailActivity.this,"取消 了",Toast.LENGTH_LONG).show();
}
};
分享的消息類型
純文本分享
new ShareAction(ShareActivity.this).withText("hello").withMedia(image).share();
圖片
UMImage image = new UMImage(ShareActivity.this, "imageurl");//網絡圖片
UMImage image = new UMImage(ShareActivity.this, file);//本地文件
UMImage image = new UMImage(ShareActivity.this, R.drawable.xxx);//資源文件
UMImage image = new UMImage(ShareActivity.this, bitmap);//bitmap文件
UMImage image = new UMImage(ShareActivity.this, byte[]);//字節流
多圖分享
現在支持多圖分享的平臺有兩個,一個是新浪微博一個是QQ空間,都是最多上傳9張圖片,新浪微博超過9張不會上傳,QQ空間超過九張會上傳QQ空間相冊。
new ShareAction(ShareDetailActivity.this).withMedias(imagelocal,imagelocal,imagelocall)
.setPlatform(share_media)
.withText("hello")
.setCallback(shareListener).share();
鏈接
UMWeb web = new UMWeb(Defaultcontent.url);
web.setTitle("This is music title");//標題
web.setThumb(thumb); //縮略圖
web.setDescription("my description");//描述
new ShareAction(ShareActivity.this)
.withMedia(web)
.share();
視頻
UMVideo video = new UMVideo(videourl);
video.setTitle("This is music title");//視頻的標題
video.setThumb("http://www.umeng.com/images/pic/social/chart_1.png");//視頻的縮略圖
video.setDescription("my description");//視頻的描述
音樂
UMusic music = new UMusic(musicurl);//音樂的播放鏈接
music.setTitle("This is music title");//音樂的標題
music.setThumb("http://www.umeng.com/images/pic/social/chart_1.png");//音樂的縮略圖
music.setDescription("my description");//音樂的描述
music.setmTargetUrl(Defaultcontent.url);//音樂的跳轉鏈接
new ShareAction(ShareActivity.this).withMedia(music).share();
GIF(目前只有微信好友分享支持Emoji表情,其他平臺暫不支持)
UMEmoji emoji = new UMEmoji(this,"http://img5.imgtn.bdimg.com/it/u=2749190246,3857616763&fm=21&gp=0.jpg");
emoji.setThumb(new UMImage(this, R.drawable.thumb));
new ShareAction(ShareActivity.this)
.withMedia(emoji).share();
微信小程序
UMMin umMin = new UMMin(Defaultcontent.url);
//兼容低版本的網頁鏈接
umMin.setThumb(imagelocal);
// 小程序消息封面圖片
umMin.setTitle(Defaultcontent.title);
// 小程序消息title
umMin.setDescription(Defaultcontent.text);
// 小程序消息描述
umMin.setPath("pages/page10007/xxxxxx");
//小程序頁面路徑
umMin.setUserName("gh_xxxxxxxxxxxx");
// 小程序原始id,在微信平臺查詢
new ShareAction(ShareDetailActivity.this)
.withMedia(umMin)
.setPlatform(share_media)
.setCallback(shareListener).share();