Android 友盟分享借鑑最實用總結(2018更新)

前言

當你出去外面旅遊,拍了很多好看的照片,想要跟別人分享,但是身邊沒有人,那怎麼辦呢,肯定是利用手機上的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版本的手機必須自己寫適配權限,要不然讀取不到權限,無法跳轉到分享頁面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章