zoukankan      html  css  js  c++  java
  • android使用sharesdk的小感

    1.sharesdk快捷方式,快捷方式集成了所有需要分享到的手机app,但是具有缺陷,举个例子(想要微信分享图片url,但是短信并不想带有图片,否则短信成彩信,这里集成的就有麻烦了,为了解决这种问题,就需要自定义,写个回调函数,去掉短信里面的图片资源)

    2.sharesdk可以单独的去分享,比如只有微信,这里给的参考文档并不是特别详细,与客服mm聊了很久才解决问题

    移植步骤:

    1. 下载android资源:http://www.mob.com/#/downloadDetail/ShareSDK/android
    2. 根据文档:http://wiki.mob.com/Android_%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E6%8C%87%E5%8D%97/undefined生成你想要的资源
    3. 移植至你的应用,这里需要配置的地方有很多(请看文档),当然你也需要注册你的应用在sharesdk,以及你想要使用的分享应用,如:微信。新浪。qq等,这里需要获取你的应用签名
    4. 根据注册信息替换相应的appid等信息
    5. 快捷分享方式:
    
     1. 1.按钮点击事件
    
    case R.id.pll_Invitation: // 邀请
                if (HttpUtil.isNetworkAvailable(mContext)) {
                    ShareSDK.initSDK(mContext);
                    OnekeyShare oks = new OnekeyShare();
                    /*增加回调,处理短信内容*/
                    oks.setCallback(this);
                    ShareMSG.showShare(oks,mContext);
                }else{
                    Toast.makeText(mContext, "请联网后使用", 1000).show();
                }
    
                break;
    
     1. 2.调用方法:
    
    public class ShareMSG {
        public static void showShare(OnekeyShare oks,Context mContext) {
            final String downUrl="http://fainic.software/EbonPm_m";
    
            // 关闭sso授权
            oks.disableSSOWhenAuthorize();
    
            // 分享时Notification的图标和文字 2.5.9以后的版本不调用此方法。现在是2.6.3,所以不使用
            // oks.setNotification(R.drawable.ic_launcher,
            // getString(R.string.app_name));
            // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
            oks.setTitle("易贝恩项目管家分享");
            // text是分享文本,所有平台都需要这个字段
            oks.setText(Html.fromHtml("<a  href = '"+downUrl+"'>我正在使用易贝恩项目管家 管理项目,你也来试试!
     临时立即下载 </a>") +
                    downUrl+
                        "
    (可自行复制至浏览器或百度下载!)");
    
            // 网络图片的url:所有平台,由于短信不需要图片,微信里面必须带有图片,所以在微信里单写
            oks.setImageUrl("http://fainic.software/EbonPm_m/logo.png");// 网络图片rul
    
            /* *
             * titleUrl是标题的网络链接,仅在人人网和QQ空间使用
             */
            oks.setTitleUrl(downUrl);
            // imagePath是图片的本地路径:除Linked-In以外的平台都支持此参数
            // oks.setImagePath(Environment.getExternalStorageDirectory() +
            // "/meinv.jpg");//确保SDcard下面存在此张图片
    
            // comment是我对这条分享的评论,仅在人人网和QQ空间使用
    //      oks.setComment("我是测试评论文本");
            // site是分享此内容的网站名称,仅在QQ空间使用
            oks.setSite("伊贝恩项目管理助手");
            // siteUrl是分享此内容的网站地址,仅在QQ空间使用
            oks.setSiteUrl(downUrl);
    
            /* *
             * url仅在微信(包括好友和朋友圈)中使用
             */
            oks.setUrl(downUrl);
            oks.setDialogMode();
    
            //此处为本demo关键为一键分享折子定义分享回调函数   shareContentCustomuzeCallback
            //oks.setCallback(this);增加回调
            //自定义平台可以通过判断不同的平台来实现不同平台间的不同操作
            oks.setShareContentCustomizeCallback(new ShareContentCustomizeCallback() {
                //自定义分享的回调想要函数
                @Override
                public void onShare(Platform platform,
                        cn.sharesdk.framework.Platform.ShareParams paramsToShare) {
    //              点击微信好友、朋友圈
                    if("Wechat".equals(platform.getName()) || "WechatMoments".equals(platform.getName())){
                        paramsToShare.setTitle("易贝恩项目管家分享");
                        // text是分享文本,所有平台都需要这个字段
                        paramsToShare.setText(Html.fromHtml("<a  href = '"+downUrl+"'>我正在使用易贝恩项目管家 管理项目,你也来试试!
     临时立即下载 </a>") +
                                downUrl+
                                    "
    (可自行复制至浏览器或百度下载!)");
                        // 网络图片的url:所有平台
                        paramsToShare.setImageUrl("http://fainic.software/EbonPm_m/logo.png");// 网络图片rul
                        Log.i("Wechat", "Wechat");
                    }
    //              点击短信
                    if("ShortMessage".equals(platform.getName())){
                        paramsToShare.setText(Html.fromHtml("<a  href = '"+downUrl+"'>我正在使用易贝恩项目管家 管理项目,你也来试试!
     临时立即下载 </a>") +
                                downUrl+
                                "
    (可自行复制至浏览器或百度下载!)");
                        paramsToShare.setImageUrl("");
                        paramsToShare.setShareType(Platform.SHARE_APPS);
                    }
                }
            });
            oks.show(mContext);
    //      新浪微博目前处于测试阶段,审核通过可以用
        }
    }
    
     1. 3所在activity实现PlatformActionListener, Callback 接口
    
     //分享回调
    
        @Override
        public void onCancel(Platform platf, int arg1) {
            Log.i("", "onCancel");
            if(arg1 == Platform.ACTION_SHARE){
                UIHandler.sendEmptyMessage(SHARE_CANCEL, this);
            }
        }
    
        @Override
        public void onComplete(Platform platf, int arg1,
                HashMap<String, Object> arg2) {
            Log.i("", "onComplete");
            Toast.makeText(mContext, "分享成功", Toast.LENGTH_SHORT).show();
            if(arg1 == Platform.ACTION_SHARE){
                UIHandler.sendEmptyMessage(SHARE_SUCCESS, this);
                Log.i("", "响应分享事件");
            }
            if(arg1 == Platform.SHARE_TEXT){
                Log.i("", "响应分享文本事件");
                UIHandler.sendEmptyMessage(SHARE_SUCCESS, this);
                Log.i("", "..");
            }
        }
    
        @Override
        public void onError(Platform platf, int arg1, Throwable arg2) {
            // TODO Auto-generated method stub
            Log.i("", "onError");
            if(arg1 == Platform.ACTION_SHARE){
                UIHandler.sendEmptyMessage(SHARE_ERROR, this);
            }
        }
    
        @Override
        public boolean handleMessage(Message msg) {
            Log.i("", "what = " + msg.what);
            switch(msg.what) {
            case SHARE_SUCCESS: {
    //          Log.i("", "arg1 = " + "分享成功");
    //          Toast.makeText(mContext, "分享成功", Toast.LENGTH_SHORT).show();
            }
            break;
            case SHARE_CANCEL: {
                Log.i("", "arg1 = " + "取消分享");
                Toast.makeText(mContext, "取消分享", Toast.LENGTH_SHORT).show();
            }
            break;
            case SHARE_ERROR: {
                Log.i("", "arg1 = " + "分享错误");
                Toast.makeText(mContext, "分享错误", Toast.LENGTH_SHORT).show();
            }
            break;
    
        }
    
            return false;
        }
    

    以上可以解决不同分享应用之间的数据差异问题,
    我所遇到的问题:
    1.短信、微信图片问题:微信分享有图片才能有超链接的跳转,然而短信我不需要(有图片就成彩信了),这里我是在全局里面setImageUrl,然后通过回调函数把短信的ShareParams的ImageUrl设置为空(这里我使用在全局设置里不设置ImageUrl,在微信里设置ImageUrl的值并没有微信效果,或许需要在全局设置setImageUrl(“”)这样)

    6.不同平台的单独的分享:
    我只是用了微信的消息分享,根据文档编写:http://wiki.mob.com/%E4%B8%8D%E5%90%8C%E5%B9%B3%E5%8F%B0%E5%88%86%E4%BA%AB%E5%86%85%E5%AE%B9%E7%9A%84%E8%AF%A6%E7%BB%86%E8%AF%B4%E6%98%8E/
    开始我使用短信还是有效果的,但是微信没效果,这里需要注意4
    1.讲所有的jar包build path–》add to library,否则报错,
    2加ShareSDK.initSDK(mContext);
    3针对不同平台,设置好你的分享属性:sp.setShareType(Platform.SHARE_WEBPAGE);
    4不同平台的ShareParams也是不一样,我就是把sp.setUrl忘记了,结果不能调用微信

    代码:
    if (HttpUtil.isNetworkAvailable(mContext)) {
                    ShareSDK.initSDK(mContext);
                    Platform.ShareParams sp = new Wechat.ShareParams();
                    // 一定要设置分享属性
                    sp.setShareType(Platform.SHARE_WEBPAGE);
                    // text是分享文本,所有平台都需要这个字段
                    sp.setText("我使用易贝恩项目管家给你分配了任务,请使用app进行查看!
     没有app请点击下载 " +
                                "
    (点击后请在浏览器中打开下载!)");
                    sp.setTitle("易贝恩项目管家分享");
    //              // 网络图片的url:所有平台,由于短信不需要图片,微信里面必须带有图片,所以在微信里单写
                    sp.setImageUrl("http://fainic.software/EbonPm_m/logo.png");// 网络图片rul
                    sp.setUrl("http://fainic.software/EbonPm_m");
                    Platform qzone = ShareSDK.getPlatform (Wechat.NAME);
                    qzone. setPlatformActionListener (new PlatformActionListener() {
    
                        @Override
                        public void onError(Platform arg0, int arg1, Throwable arg2) {
                            // TODO Auto-generated method stub
                            Toast.makeText(mContext, "指派分享错误", Toast.LENGTH_SHORT).show();
                        }
    
                        @Override
                        public void onComplete(Platform arg0, int arg1, HashMap<String, Object> arg2) {
                            // TODO Auto-generated method stub
                            Toast.makeText(mContext, "指派分享成功", Toast.LENGTH_SHORT).show();
                        }
    
                        @Override
                        public void onCancel(Platform arg0, int arg1) {
                            // TODO Auto-generated method stub
                            Toast.makeText(mContext, "指派分享删除", Toast.LENGTH_SHORT).show();
                        }
                    }); // 设置分享事件回调
                    // 执行图文分享
                    qzone.share(sp);
                }else{
                    Toast.makeText(mContext, "请联网后使用", 1000).show();
                }

    以上我使用的是2.6.3版本,不过近期又有了现版本2.6.4,与客服交谈过程中发现新版本优势更多,主要是快捷分享之后的回调,所以自己更改为2.6.4

    • 微信的回调:WXEntryActivity的包名必须是 app包名+wxapi,与你在微信开发者平台填写一样,否则回调失败
    • 短信的回调这里没法监听,所以sharesdk目前是在打开短信应用之后直接调用PlatformActionListener的onComplete,代表成功,想要实现监听,估计得自己写服务监听,广播接收等,网上有类似例子
    • 这里qq/空间的监听也有所改变,修复了bug,qq是在这里添加的,其中tencent数字必须是你在qq申请的数字,tencent1104914478
    <activity
                android:name="com.mob.tools.MobUIShell"
                android:configChanges="keyboardHidden|orientation|screenSize"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Translucent.NoTitleBar"
                android:windowSoftInputMode="stateHidden|adjustResize" >
                <intent-filter>
                    <!-- qq appid -->
                    <data android:scheme="tencent1104914478" />
    
                    <action android:name="android.intent.action.VIEW" />
    
                    <category android:name="android.intent.category.BROWSABLE" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>
    • 4.添加了新浪微博的回调
     <!-- 调用新浪原生SDK,需要注册的回调activity -->
            <activity
                android:name="cn.sharesdk.sina.weibo.SinaActivity"
                android:theme="@android:style/Theme.Translucent.NoTitleBar" >
                <intent-filter>
                    <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
    
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>
  • 相关阅读:
    在线教育项目-day10【微服务简单概念】
    在线教育项目-day10【删除小节视频】
    在线教育项目-day09【添加小节上传视频前端】
    【面试】足够应付面试的Spring事务源码阅读梳理(建议珍藏)
    【面试】Spring事务面试考点吐血整理(建议珍藏)
    【面试】我是如何在面试别人Spring事务时“套路”对方的
    爸爸又给Spring MVC生了个弟弟叫Spring WebFlux
    JVM上的响应式流 — Reactor简介
    我是如何在毕业不久只用1年就升为开发组长的
    JVM平台上的响应式流(Reactive Streams)规范
  • 原文地址:https://www.cnblogs.com/melons/p/5791917.html
Copyright © 2011-2022 走看看