前言
當你出去外面旅遊,拍了很多好看的照片,想要跟別人分享,但是身邊沒有人,那怎麼辦呢,肯定是利用手機上的App 發個朋友圈啥的把,這就要用到分享功能了,作爲一個IT程序員,不少人都有選擇證把,分享集成有好多個平臺,在這裏我推薦用友盟,因爲它可以搭配統計一起使用,根據個人習慣而定.
介紹
友盟統計
友盟官方集成文檔
友盟多功能Android Demo
使用
(一). 集成準備
1.獲取AppKey
集成【友盟+】SDK之前,您首先需要到 【友盟+】官網註冊並且添加新應用,獲得AppKey,這個應該沒什麼問題
2.快速集成
官方文檔指出有兩種集成方式:自動集成和手動集成
- 自動集成:現在只支持微信,QQ,新浪三個平臺,如果想使用其他平臺需要選擇快速集成。
- 快速集成:需要下載最新SDK,選擇社會化分享SDK即可,多種平臺可以選擇。
爲了方便,主要使用自動集成的方式,如果你們在開發項目的時候,一定要仔細看官方文檔,一看嚇一跳!!
(二).簡單使用
第一步:依賴只支持微信,QQ,新浪三個平臺
注意:依賴庫qq包不全,不能回調QQ回調頁面,在這裏我使用了jar包
// 基礎組建庫,要是不添加會導致初始化的時候的UMConfigure這個類不能識別
compile 'com.umeng.sdk:common:latest.integration'
compile 'com.umeng.sdk:utdid:1.1.5.3'
//在App上線前請務必刪除集成調試庫,避免無關信息的打印。
compile 'com.umeng.sdk:debug:latest.integration'
//友盟分享 QQ 微信 新浪
compile 'com.umeng.sdk:share-core:latest.integration'
//compile 'com.umeng.sdk:share-qq:latest.integration'
compile 'com.umeng.sdk:share-wechat:latest.integration'
compile 'com.umeng.sdk:share-sina:latest.integration'
//分享面板需要使用
compile 'com.umeng.sdk:shareboard-widget:latest.integration'
第二步:相關配置
QQ相關配置
<!--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:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
微信相關配置
在包名目錄下創建wxapi文件夾,新建一個名爲WXEntryActivity的activity繼承WXCallbackActivity。
<!--微信-->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
新浪相關配置
<!--新浪-->
<activity
android:name="com.umeng.socialize.media.WBShareCallBackActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
<activity
android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:windowSoftInputMode="adjustResize"></activity>
<activity
android:name="com.sina.weibo.sdk.share.WbShareTransActivity"
android:launchMode="singleTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
簽名相關配置
微信簽名詳解
第三步:配置權限
<!-- 必須的權限 -->
<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" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--如果需要使用QQ純圖分享或避免其它平臺純圖分享的時候圖片不被壓縮,可以增加以下權限:-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 推薦的權限 -->
<!-- 添加如下權限,以便使用更多的第三方SDK和更精準的統計數據 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
第四步:初始化設置
初始化需要在自己新建Application中調用我們的初始化接口:
private void initShare() {
/**
* 設置組件化的Log開關
* 參數: boolean 默認爲false,如需查看LOG設置爲true
*/
UMConfigure.setLogEnabled(true);
/**
* 如果在註冊清單裏 聲明APP KEY,就可以使用這個初始化方法
*
* 初始化common庫
* 參數1:上下文,不能爲空
* 參數2:APP_KEY 如果設置爲null 在註冊清單 添加 <meta-data android:name="UMENG_APPKEY" android:value="5ac6d250f43e4835e8000a27" />
* 參數3:Channel 如果設置爲null 同上
* 參數4:設備類型,UMConfigure.DEVICE_TYPE_PHONE爲手機、UMConfigure.DEVICE_TYPE_BOX爲盒子,默認爲手機
* 參數5:Push推送業務的secret 需要集成Push功能必須傳入的sercet,否則爲空
*/
UMConfigure.init(getApplicationContext(), "友盟應用APPKETY", "umeng", UMConfigure.DEVICE_TYPE_PHONE, null);
// PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");
PlatformConfig.setWeixin("wx36db35b049be0d54", "7103f189703d59a3798755df5f23ddfa");
PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad", "http://sns.whalecloud.com");
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
}
第五步:代碼中編寫
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initPermission();
}
/**
* 6.0版本以上需要適配權限
*/
private void initPermission() {
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);
}
}
public void mBtn(View view) {
//設置面板自定義
ShareBoardConfig config = new ShareBoardConfig();
//設置位置
config.setShareboardPostion(ShareBoardConfig.SHAREBOARD_POSITION_CENTER);
//設置item背景形狀
config.setMenuItemBackgroundColor(ShareBoardConfig.BG_SHAPE_CIRCULAR);
//設置分享面板title文本內容
config.setTitleText("測試選擇要分享的平臺");
new ShareAction(MainActivity.this)
.setDisplayList(SHARE_MEDIA.SINA, SHARE_MEDIA.QQ, SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE)
.withText("hello")
.withMedia(new UMImage(MainActivity.this, R.mipmap.ic_launcher))
.setCallback(umShareListener)
.open(config);
}
private UMShareListener umShareListener = new UMShareListener() {
/**
* @descrption 分享開始的回調
* @param platform 平臺類型
*/
@Override
public void onStart(SHARE_MEDIA platform) {
Toast.makeText(MainActivity.this, "開始了", Toast.LENGTH_LONG).show();
}
/**
* @descrption 分享成功的回調
* @param platform 平臺類型
*/
@Override
public void onResult(SHARE_MEDIA platform) {
Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_LONG).show();
}
/**
* @descrption 分享失敗的回調
* @param platform 平臺類型
* @param t 錯誤原因
*/
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(MainActivity.this, "失敗了" + t.getMessage(), Toast.LENGTH_LONG).show();
}
/**
* @descrption 分享取消的回調
* @param platform 平臺類型
*/
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_LONG).show();
}
};
/**
* QQ與新浪不需要添加Activity,但需要在使用QQ分享或者授權的Activity中,添加:
*
* @param requestCode
* @param resultCode
* @param data
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
/**
* 內存泄漏解決方案,在使用分享的Activity中,重寫onDestory()方法:
*/
@Override
protected void onDestroy() {
super.onDestroy();
UMShareAPI.get(this).release();
}
}
總結
備註:
效果圖:以後再發
github地址
微信簽名,出的問題很大,必須自己去微信開發平臺自己創建一個應用,還有時間審覈期,需要開通功能纔可以使用微信的key
QQ,如果安裝文檔 提示 使用自動集成的話,依賴庫qq導入的文件不全,無法在註冊清單裏聲明Activity,需要自己下載jar包 add導入
如果要分享照片,6.0版本的手機必須自己寫適配權限,要不然讀取不到權限,無法跳轉到分享頁面