Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 360|回复: 0

Android 友盟分享详细集成过程及所遇问题解决

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-5-6 03:07:07 | 显示全部楼层 |阅读模式

    最近项目需要针对微信、朋友圈、QQ、QQ空间集成友盟分享的功能,说实话,我也是第一次做,期间碰到过很多问题,这篇随笔就来写一下我是怎么集成友盟分享的,还有碰到哪些问题,都是怎样解决的!

    其实集成友盟并不是很难,跟着集成文档一步一步走下来就可以,而且下载的友盟SDK会附带Demo,但是Demo中有很多东西是用不上的,所以就需要我们选择性的摘取有用的部分!

    如需转载请注明出处:http://www.cnblogs.com/upwgh/p/6382085.html

    1-获取友盟Appkey

    如果你之前已经在友盟注册了应用,并获取到了Appkey,可以继续使用它.

    如果你尚未在友盟注册开发者账号,需要先注册,注册之后登录你的账号,点击添加新应用,填写完应用基本信息后,将进入"下载SDK并添加代码"页面,此页面即可得到Appkey。

    2-下载SDK并解压到本地

    到友盟官网下载最新版本U-Share SDK,现在的版本是v6.2.2

    因为项目中只需要集成微信、朋友圈、QQ、QQ空间,所以只勾选了这两项,微信完整版是带有支付功能,没有支付功能的话只需要勾选精简版就可以了。

    接下来就到我们的项目中了

    3-环境配置(AndroidManifestXml)

    3-1权限配置

    复制代码
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    复制代码

    3-2注册相关的Activity

    微信:

    <activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            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:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="orientation|keyboardHidden|screenSize"/>
    复制代码

    注意:这里要放自己项目在QQ开放平台的id,而且前面的tencent是一定不能省略的,否则在运行的时候,会报QQ配置错误的问题。

    3-3友盟Appkey及相关第三方key配置

    在AndroidManifest.xml中设置友盟Appkey

    <meta-data
                android:name="UMENG_APPKEY"
                android:value="561cae6ae0f55abd990035bf">
             </meta-data>

    在Application中配置第三方平台的key

    {
        //微信和QQ开放平台对应的AppId和Appkey PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3"); PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba"); }

    在application中初始化sdk,这个初始化最好放在application的程序入口中,防止意外发生:

    public void onCreate() {
        super.onCreate();
            //开启debug模式,方便定位错误,具体错误检查方式可以查看http://dev.umeng.com/social/android/quick-integration的报错必看,正式发布,请关闭该模式
        Config.DEBUG = true;
        UMShareAPI.get(this);
    }

    4-代码实现

    4-1、解压下载好的SDK,将main和platforms下面的libs里面的jar包导入到项目中(复制粘贴。。。),并添加依赖。

    4-2、包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。这里注意一定是包名路径下,例如我的包名是com.umeng.soexample,则配置如下:(需要注意,如果使用精简版WXCallbackActivity的路径为com.umeng.weixin.callback.WXCallbackActivity,如果使用完整版路径是com.umeng.socialize.weixin.view.WXCallbackActivity)

     

    4-3、功能代码(代码部分只贴出部分重点内容,如有疑问请留言)

    4-3-1 分享会掉监听

    复制代码
    //分享回调
        private UMShareListener umShareListener = new UMShareListener() {
            @Override
            public void onResult(SHARE_MEDIA platform) {
                Log.d("plat","platform"+platform);
                ToastUtil.showToast("分享成功");
    //            if (platform.toString().equals("QQ")){
    //                ToastUtil.showToast("手机QQ分享成功");
    //            }else if (platform.toString().equals("QZONE")){
    //                ToastUtil.showToast("QQ空间分享成功");
    //            }else if (platform.toString().equals("WEIXIN")){
    //                ToastUtil.showToast("微信好友分享成功");
    //            }else if (platform.toString().equals("WEIXIN_CIRCLE")){
    //                ToastUtil.showToast("微信朋友圈分享成功");
    //            }
    
            }
    
            @Override
            public void onError(SHARE_MEDIA platform, Throwable t) {
                ToastUtil.showToast("分享失败");
                if(t!=null){
                    Log.d("throw","throw:"+t.getMessage());
                }
            }
    
            @Override
            public void onCancel(SHARE_MEDIA platform) {
                ToastUtil.showToast("分享取消");
            }
        };
    复制代码

    这是对于分享成功、失败、取消所对应的回调,对分享结果做相应的处理(这部分代码要放在成员变量)

    4-3-2 点击分享事件

    复制代码
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.tv_cancle:
                    popupWindow.dismiss();
                    break;
                case R.id.rl_common_title_exit:
                    initPopupWindow();
                    //设置popupWindow显示的位置
                    popupWindow.showAtLocation(mPopView, Gravity.BOTTOM, 0, 0);
                    backgroundAlpha(0.5f);
                    break;
                case R.id.qq:
                    new ShareAction(ShowWebViewActivity.this)
                            .setPlatform(SHARE_MEDIA.QQ)
                            .withText(content).withTitle(title).withTargetUrl(linkHref).withMedia(image)
                            .setCallback(umShareListener)
                            .share();
                    popupWindow.dismiss();
                    break;
                case R.id.weixin:
                    new ShareAction(ShowWebViewActivity.this)
                            .setPlatform(SHARE_MEDIA.WEIXIN)
                            .withText(content).withTitle(title).withTargetUrl(linkHref).withMedia(image)
                            .setCallback(umShareListener)
                            .share();
                    popupWindow.dismiss();
                    break;
                case R.id.kongjian:
                    new ShareAction(ShowWebViewActivity.this)
                            .setPlatform(SHARE_MEDIA.QZONE)
                            .withText(content).withTitle(title).withTargetUrl(linkHref).withMedia(image)
                            .setCallback(umShareListener)
                            .share();
                    popupWindow.dismiss();
                    break;
                case R.id.pengyouquan:
                    new ShareAction(ShowWebViewActivity.this)
                            .setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE)
                            .withText(content).withTitle(title).withTargetUrl(linkHref).withMedia(image)
                            .setCallback(umShareListener)
                            .share();
                    popupWindow.dismiss();
                    break;
            }
        }
    复制代码

    标红的这部分是需要分享的内容,根据需要自己进行初始化

    复制代码
        /**\
         * 分享链接、title、内容
         */
        String linkHref = "分享链接";
        String title = "分享标题!";
        String content = "分享内容";
        //分享图片
        private UMImage image = null;
    复制代码

    4-3-3 分享弹窗

    大家应该看出来了,我的分享面板是写的一个PopupWindow

    关于PopupWindow我有写过一篇相关的随笔http://www.cnblogs.com/upwgh/p/5910261.html

    不同的是因为需要,分享弹窗弹出的时候,背景要变色,弹窗消失的时候,背景要恢复,随意写了一个简单的动画。

    initPopupWindow():
    复制代码
    private void initPopupWindow() {
            /**
             * 实例popupWindow对象
             */
            popupWindow = new PopupWindow(mPopView, GridLayout.LayoutParams.MATCH_PARENT, GridLayout.LayoutParams.WRAP_CONTENT);
            //设置popupWindow中的item可以被点击,这句话是必须要添加的
            popupWindow.setFocusable(true);
         //设置动画 popupWindow.setAnimationStyle(R.style.mypopwindow_anim_style); //设置PopupWindow的背景 //如果不设置背景,会导致无论是点击外部区域还是Back键都无法dismiss掉popupWindow ColorDrawable dw = new ColorDrawable(0xb0000000); popupWindow.setBackgroundDrawable(dw); }
    复制代码

    弹窗弹出动画:

    复制代码
        <style name="mypopwindow_anim_style">
            <!-- 指定显示的动画xml -->
            <item name="android:windowEnterAnimation">@anim/popu_show</item>
    
            <!-- 指定消失的动画xml -->
            <item name="android:windowExitAnimation">@anim/popu_hide</item>
        </style>
    复制代码

    popu_show.xml:

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate
            android:duration="200"
            android:fromYDelta="100%p"
            android:toYDelta="0" />
    
        <alpha
            android:duration="200"
            android:fromAlpha="0.0"
            android:toAlpha="1.0" />
    </set>
    复制代码

    popu_hide.xml:

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    
        <translate
            android:duration="200"
            android:fromYDelta="0"
            android:toYDelta="50%p" />
    
        <alpha
            android:duration="200"
            android:fromAlpha="1.0"
            android:toAlpha="0.0" />
    </set>
    复制代码

    最后设置分享弹窗弹出时背景的变化:

    复制代码
        /**
         * 设置添加屏幕的背景透明度
         * @param bgAlpha
         */
        public void backgroundAlpha(float bgAlpha) {
            WindowManager.LayoutParams lp = getWindow().getAttributes();
            lp.alpha = bgAlpha; //0.0-1.0
            getWindow().setAttributes(lp);
            popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
    
                @Override
                public void onDismiss() {
                    WindowManager.LayoutParams lp = getWindow().getAttributes();
                    lp.alpha = 1f;
                    getWindow().setAttributes(lp);
                }
            });
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        }
    复制代码

    以上就是这次分享功能的主要内容了,写的可能不是很好,大家多多包涵,如果有错误或者不明白的地方,欢迎留言哈~~~

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-19 02:52 , Processed in 0.081751 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表