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版本的手机必须自己写适配权限,要不然读取不到权限,无法跳转到分享页面

猜你喜欢

转载自blog.csdn.net/m0_37711172/article/details/80065280