shareSDK分享遇到的坑

一。 首先是AndroidManifest

              <uses-permission android:name="android.permission.GET_TASKS" />
              <uses-permission android:name="android.permission.INTERNET" />
              <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
              <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
              <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
              <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
              <uses-permission android:name="android.permission.READ_PHONE_STATE" />
              <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
              <uses-permission android:name="android.permission.GET_ACCOUNTS"/>



                  <!-- 分享 -->
        <activity
            android:name="cn.sharesdk.framework.ShareSDKUIShell"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:windowSoftInputMode="stateHidden|adjustResize" >
            <intent-filter>
                <data android:scheme="tencent100371282" />

                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        
         <!-- 微信分享回调 -->
        <activity
            android:name="cn.sharesdk.demo.wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />


二 。 shareSDK 配置文件和资源文件






  

三. 主要代码实现



    private static String testImage;

    private static final String FILE_NAME = "/lifebao.jpg";

    public static void initImagePath(final Context mContext) {
        try {
            String cachePath = cn.sharesdk.framework.utils.R.getCachePath(mContext, null);
            testImage = cachePath + FILE_NAME;
            File file = new File(testImage);
            if (!file.exists()) {
                file.createNewFile();
                Bitmap pic = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.ic_launcher);
                FileOutputStream fos = new FileOutputStream(file);
                pic.compress(CompressFormat.JPEG, 100, fos);
                fos.flush();
                fos.close();
            }
        } catch (Throwable t) {
            t.printStackTrace();
            testImage = null;
        }
    }

    public static void initOnekeyShare(final Context mContext, final String url, final String code) {
        OnekeyShare oks = new OnekeyShare();
        oks.setAddress("12345678901");
        oks.setTitle(mContext.getString(R.string.share));
        oks.setTitleUrl(url);
        oks.setText("注册会员即送5元新人现金红包,注册时输入邀请码:" + code + "领取。首次充值再送10元现金红包,更多好礼请关注海控life宝公众号。 " + url);
        oks.setImagePath(testImage);
        oks.setImageUrl("http://img.appgo.cn/imgs/sharesdk/content/2013/07/25/1374723172663.jpg");
        oks.setUrl(url);
        oks.setFilePath(testImage);
        oks.setComment(mContext.getString(R.string.share));
        oks.setSite(mContext.getString(R.string.app_name));
        oks.setVenueName("ShareSDK");
        oks.setVenueDescription("This is a beautiful place!");
        oks.setLatitude(23.056081f);
        oks.setLongitude(113.385708f);
        oks.disableSSOWhenAuthorize();
        oks.setShareContentCustomizeCallback(new ShareContentCustomizeCallback() {

            @Override
            public void onShare(final Platform platform, final ShareParams paramsToShare) {
                // 改写twitter分享内容中的text字段,否则会超长,
                // 因为twitter会将图片地址当作文本的一部分去计算长度
                //                if ("Twitter".equals(platform.getName())) {
                //                    paramsToShare.setText(platform.getContext().getString(R.string.share_content_short));
                //                }
            }
        });

        oks.show(mContext);

        final Handler mmhandler = new Handler() {

            @Override
            public void handleMessage(final android.os.Message msg) {
                switch (msg.what) {
                case 1:
                    Toast.makeText(mContext, "尚未安装,请安装微信客户端", 0).show();
                    break;

                default:
                    break;
                }
            };
        };

        oks.setCallback(new PlatformActionListener() {

            @Override
            public void onCancel(final Platform arg0, final int arg1) {
                Log.i("---------------------", "onCancel");
            }

            @Override
            public void onComplete(final Platform arg0, final int arg1, final HashMap<String, Object> arg2) {
                Log.i("---------------------", "onComplete");
            }

            @Override
            public void onError(final Platform arg0, final int arg1, final Throwable arg2) {
                Log.i("---------------------", "onError");
                if (arg2.toString().equals("cn.sharesdk.wechat.utils.WechatClientNotExistException")) {
                    new Thread() {

                        @Override
                        public void run() {
                            try {
                                mmhandler.sendEmptyMessage(1);
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        };
                  }.start();
                }
            }

        });

    }


四。 调试过程遇到的问题

         1.  遇到 “分享正在后台操作提示语”,搜索 “ sharing”,去掉提示方法即可

 

              


  2  .    发现用sharesdk,做其他平台分享很快;如新浪微博、腾讯微博、有道云笔记、开心网、Google+等等,几句代码就搞定;           但是微信有点麻烦,下面我把如何解决问题说一下,方便其他开发者参考。
        微信测试时,需要打包,签名是在微信开发平台注册应用时填写“应用签名”的keystore。
        进过反复测试,发现微信现在的机制是:
    没有审核通过的,只能调用一次;
        如果要测试,需要清除微信的缓存;
        或者注册多个应用账号,然后在assets文件夹中替换微信的配置id;

       审核过了,就可以很方便测试。
       集成sharesdk,做微信分享时,要先确定几个流程是否有问题。
       1、现在微信开发平台注册应用,然后在assets/ShareSDKDevInfor,修改微信的配置信息
    
       2、添加微信的回调activity,然后再manifest中注册
     
   3、分享的参数可以参考Sample项目中,WechatPage这个类;
           由于不同的分享类型,对参数要求不一样,一定要严格对比;否则调用不了微信客户端
          如,SHARE_TEXT,要求要title和text
               SHARE_WEBPAGE,要求要title、text、url、thumbPath
         等等很多分享类型,基本title和text是必须的
       4、测试时,要打包,用在微信平台注册时的签名(keystore)去打包


微信填写签名的地方如图所示,
而此签名可以用不同方法得到,
   1> 是打包的时候会产生 MD5 值:
    利用此方法,要求您下载最新版本的Eclipse Android开发插件(ADT)。确保此条件后,右键您的项目,选择“Android Tools”—“Export Signed
ApplicationPackage…”

    此时会弹出一个导出签名apk的窗口,输入您应用正式签名和密码以后,会在导出页面中,显示您签名的MD5值。将其复制出来,调整为小写,并去除多余的分隔符

   2> 是可以下载签名工具,此时将您的工程打包成 apk 安装手机,然后将
签名工具安装到手机上,输入您的工程包名,得到签名填写到微信签名处。具体方法查看上述链接。
第三条,分享参数,sharesdk默认是图文也就是分享链接的方式,SHARE_WEBPAGE
分享不同方式请参考微信分享的详细内容:
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/
第四条,在微信申请的平台通过了审核;
第五条,微信填写的包名要与您的工程包名一致如图所示。






       5、测试是否可以打开微信客户端,可以的话,说明代码基本没有问题;
           如果要多次测试微信分享,可以清除微信客户端的缓存,不然只能调用一次

    

        

    首先,微信在android平台有两种方式:一种是绕过审核分享,一种是不绕过审核分享。
绕过审核和不绕过审核的对比图如下:
1、微信好友对比图:
绕过审核分享分享给微信好友时看到的只是图片文件,显示的是图片的信息,并不显示分享的标题、文字、也链接不到网址;分享到微信朋友圈的是文字和图片。
不绕过审核,可以有多种分享方式,常用的是分享网页链接的方式,分享到微信好友时可以显示标题、文字内容、图片、以及点击后链接的网址,在分享的下方会有一个应用的名称;分享到朋友圈值得一说的是不会显示text这个分享内容的字段,其他可以正常显示。

   左边为绕过审核;
   右边为不绕过审核。
            
        

   



2、微信朋友圈对比图:

         

              

此对比图不绕过审核为分享网页链接的方式,即shareType(SHARE_WEBPAGE);


下面我们说一下绕过审核的设置
绕过审核分享:
       <Wechat
        Id="4"
        SortId="4"
        AppId="wxdb0f7a71c883b423"
        AppSecret="daecf556b42463ce11c2421f9570cac7"
        BypassApproval="true"
        Enable="true" />
   
    < WechatMoments
        Id="5"
        SortId="5"
        AppId="wxdb0f7a71c883b423"
        BypassApproval="true"
        Enable="true" />
        
    < WechatFavorite
        Id="6"
        SortId="6"
        AppId="wxdb0f7a71c883b423"
        Enable="true" />
    如上述 sharesdk.xml 文件中的微信配置代码; BypassApproval="true"
当此句代码为 true 的时候为绕过审核的分享,绕过审核分享在快捷分享中默认是图文分享,分享本地图片路径必须有效( ImagePath ()),并且在 sdcard 目录下才可以。
微信不绕过审核分享:
    < Wechat
       Id="4"
       SortId="4"
       AppId="wx4868b35061f87885"
       BypassApproval=" false"
       Enable="true"/>
   
    < WechatMoments
       Id="5"
       SortId="5"
       AppId="wx4868b35061f87885"
       BypassApproval=" false"
        Enable="true" />
即BypassApproval="false",此时微信则是不绕过审核的。微信不绕过审核必须要满足下面五个条件:
1、测试打包成apk安装到手机进行测试;
2、打包的keystore跟微信开放平台上面的签名一致,即与MD5码一致
3、分享参数没有错误;
4、申请的应用在微信上审核通过;
5、包名跟开放平台上面的一致。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TodayEveryDay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值