sharesdk_sharesdk- - CSDN
  • 1、分享界面的修改。因为ShareSDK已经把分享界面
    1、UI的修改。因为ShareSDK已经把分享界面九宫格集成好,减少了我们很大劳动力。但是有时候我们的项目不一定要用九宫格的显示方式,我们就必须找到对应代码进行修改。在PlatformGridView以下代码可进行每行每列显示几个分享平台的操作。
     if(whR < 0.6) {
    	COLUMN_PER_LINE = 3;
    	LINE_PER_PAGE = 3;
    } else if (whR < 0.75) {
    	COLUMN_PER_LINE = 3;
    	LINE_PER_PAGE = 2;
    } else {
    	LINE_PER_PAGE = 1;
    	if (whR >= 1.75) {
    		COLUMN_PER_LINE = 6;
    	} else if (whR >= 1.5) {
    		COLUMN_PER_LINE = 5;
    	} else if (whR >= 1.3) {
    		COLUMN_PER_LINE = 4;
    	} else {
    		COLUMN_PER_LINE = 3;
    	}
    }

    若要对九宫格的背景及文字进行调整则必须找到一下代码进行修改

    修改文字及背景:

    LinearLayout ll = new LinearLayout(context);
    	ll.setOrientation(LinearLayout.VERTICAL);
    
    	ImageView iv = new ImageView(context);
    	int dp_5 = cn.sharesdk.framework.utils.R.dipToPx(context, 5);
    	iv.setPadding(dp_5, dp_5, dp_5, dp_5);
    	iv.setScaleType(ScaleType.CENTER_INSIDE);
    	LinearLayout.LayoutParams lpIv = new LinearLayout.LayoutParams(
    			LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    	lpIv.setMargins(dp_5, dp_5, dp_5, dp_5);
    	lpIv.gravity = Gravity.CENTER_HORIZONTAL;
    	iv.setLayoutParams(lpIv);
    	iv.setImageBitmap(logo);
    	ll.addView(iv);
    
    	TextView tv = new TextView(context);
    	tv.setTextColor(0xff000000);
    	tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
    	tv.setSingleLine();
    	tv.setIncludeFontPadding(false);
    	LinearLayout.LayoutParams lpTv = new LinearLayout.LayoutParams(
    			LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    	lpTv.gravity = Gravity.CENTER_HORIZONTAL;
    	lpTv.weight = 1;
    	lpTv.setMargins(dp_5, 0, dp_5, dp_5);
    	tv.setLayoutParams(lpTv);
    	tv.setText(label);
    	ll.addView(tv);
    修改取消按钮的格式颜色边框等:

    LinearLayout.LayoutParams lpBtn = new LinearLayout.LayoutParams(
    		LayoutParams.MATCH_PARENT, cn.sharesdk.framework.utils.R.dipToPx(getContext(), 45));
    int dp_10 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 10);
    int dp_50 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 50);
    lpBtn.setMargins(dp_50, dp_10, dp_50, dp_10);
    btnCancel.setLayoutParams(lpBtn);
    llPage.addView(btnCancel);
    }
    2、不同平台注意事项

    (1)微信

    问题1:调不起微信平台

    APPKey用的是别人的,而且没有进行绕过设置,后来自己申请了新的APPKey也就正常了。

    问题2 :微信回调不成功

    微信朋友圈分享成功后没有进行回调,应用没有任何显示。

    解决办法:将微信报名进行替换如下图所示

    左边的微信包名应和AndroidManifest.xml中的包保持一致。

    问题3:只分享图片不能分享文字

    解决方法:成功申请APPKey并且不要绕过审核。

    问题4:微信好友消失。

    解决方法:Enable=false"中的false改为true就可以了。

    2、新浪微博:

    问题1:调起客户端后还未点击分享即出现“分享成功”提示。

    解决方法:这是ShareSDK自身的问题,所以我改变方法,采用网页进行分享。

    题2:采用网页分享后出现"访问出错了.你所访问的站点在新浪微博的认证失败,请联系****或者稍后再试.(error:redirect_uri_mismatch) 新浪微博版权所有."

    解决办法:回调授权页面中的网址应和ShareSDK.xml中新浪微博的网址保持一致才可。

    3、腾讯微博

    问题:调不起客户端。

    解决方法:暂时未找到,后来用网页代替。

    3、QQ空间

    问题:点击QQ分享弹出页面后即显示分享失败,但是后来点击弹出的分享界面中的发送时却可以分享。

    解决方法:自己申请QQ空间的APPkey,并且在 AndroidManifest.xml中进行对应设置。但是设置后还是回调失败,后来改用网页分享回调就成功了。这可能也是S哈热SDK的不足之处吧。

    其他平台只要对照Demo一般问题不大。

    下面是我MainActivity中的代码,特别简单,需要设置的东西特别少。因为之前看到过的一个Demo中这部分特别多,后来精简了许多,但功能实现上一点问题都没有。






    展开全文
  • ShareSDK实现一键分享

    2016-10-09 19:51:00
    1.ShareSDK的介绍  Sharesdk是第三方Mob移动服务平台提供的一个一键分享的SDK;有了ShareSDK,我们集成各个平台的分享功能的开发效率明显的提高了很多。接下来,就为大家讲解一下关于ShareSDK的技术重点,在经过一天...

    1.ShareSDK的介绍

      Sharesdk是第三方Mob移动服务平台提供的一个一键分享的SDK;有了ShareSDK,我们集成各个平台的分享功能的开发效率明显的提高了很多。接下来,就为大家讲解一下关于ShareSDK的技术重点,在经过一天半的探索,终于还是摸出了些许门道,在此分享给各位伙伴!

    2.ShareSDK的使用

    1.首先登陆Mob官网注册,官网地址:http://www.mob.com

    2.进入个人后台页面,点击ShareSDK的项目。


    3.选择你要勾选的分享平台,然后进行ShareSDK的下载

    4.下载完之后,在解压文件夹里有一个快速集成工具QuickIntergrater.jar


    5.在点击集成工具之前,必须保证自己的java环境已经配置Ok了,然后双击,会出现如下界面:


    6.在上步确定之后,会自动生成一个与 项目名相同的文件夹


    7.打开文件夹,会有四个文件


    8.把四个文件对应的复制到自己的工程中(在这里我强调一下,assets复制在main目录下,res覆盖工程res目录,libs覆盖libs目录,src覆盖src目录,很多资料直接粗略的说把这四个文件拷贝到工程,然而怎么个拷贝法并没有说清楚,当然拷贝方法不唯一,仅个人喜好)


    9.配置清单文件manifest

    权限配置:

     <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"/>
        <!-- 蓝牙分享所需的权限 -->
        <uses-permission android:name="android.permission.BLUETOOTH" />
        <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    各平台的回调activity注册:

     <activity
                android:name="com.mob.tools.MobUIShell"
                android:theme="@android:style/Theme.Translucent.NoTitleBar"
                android:configChanges="keyboardHidden|orientation|screenSize"
                android:screenOrientation="portrait"
                android:windowSoftInputMode="stateHidden|adjustResize" >
    
                <intent-filter>
                    <data android:scheme="tencent1105665723" />
                    <action android:name="android.intent.action.VIEW" />
                    <category android:name="android.intent.category.BROWSABLE" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
    
                <!-- 调用新浪原生SDK,需要注册的回调activity -->
                <intent-filter>
                    <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>
            <!--微信分享回调 -->
            <activity
                android:name="cn.sharesdk.onekeyshare.wxapi.WXEntryActivity"
                android:theme="@android:style/Theme.Translucent.NoTitleBar"
                android:configChanges="keyboardHidden|orientation|screenSize"
                android:exported="true"
                android:screenOrientation="portrait" />
    这里注意一下,你在你自己的工程里用了什么平台,就要对其注册回调activity
    10.打开ShareSDK.xml,对其中的app id 和app secret进行分平台配置

    <ShareSDK 
            AppKey = "17b711d0d5064"/> <!-- 修改成你在sharesdk后台注册的应用的appkey"-->
        
        <!-- ShareByAppClient标识是否使用微博客户端分享,默认是false -->
    	<SinaWeibo
    		Id="1"
    		SortId="1"
    		AppKey="2196164667"
    		AppSecret="288681da98ec0fcc75eabf3eb2b34f43"
    		RedirectUrl="http://www.baidu.com"
    		ShareByAppClient="true"
    		Enable="true" />
    	<QQ
    		Id="2"
    		SortId="2"
    		AppId="1105665723"
    		AppKey="YB7oxWLlbNCQKmSd"
    		ShareByAppClient="true"
    		Enable="true" />
        
        <!-- 
        	Wechat微信和WechatMoments微信朋友圈的appid是一样的;
        
                           注意:开发者不能用我们这两个平台的appid,否则分享不了
        
           	  微信测试的时候,微信测试需要先签名打包出apk,
    		sample测试微信,要先签名打包,keystore在sample项目中,密码123456
    		
    		BypassApproval是绕过审核的标记,设置为true后AppId将被忽略,故不经过
    		审核的应用也可以执行分享,但是仅限于分享文字和图片,不能分享其他类型,
    		默认值为false。此外,微信收藏不支持此字段。
    	-->
    	<Wechat
    		Id="3"
    		SortId="3"
    		AppId="wxdb0f7a71c883b423"
    		AppSecret="daecf556b42463ce11c2421f9570cac7"
    		BypassApproval="true"
    		Enable="true" />
    	<WechatMoments
    		Id="4"
    		SortId="4"
    		AppId="wxdb0f7a71c883b423"
    		BypassApproval="true"
    		Enable="true" />
    	<WechatFavorite
    		Id="5"
    		SortId="5"
    		AppId="wxdb0f7a71c883b423"
    		Enable="true" />
        

    这里就必须到各个平台的开发者平台注册,并创建自己项目应用,并复制到ShareSDK.xml中,这里我列举几个常用的而开发者平台网址:

    新浪微博        http://open.weibo.com
    腾讯微博        http://dev.t.qq.com
    QQ空间          http://connect.qq.com/intro/login/
    微信好友        http://open.weixin.qq.com
    Facebook       https://developers.facebook.com
    Twitter        https://dev.twitter.com
    人人网          http://dev.renren.com
    开心网          http://open.kaixin001.com
    搜狐微博        http://open.t.sohu.com
    网易微博        http://open.t.163.com
    豆瓣           http://developers.douban.com
    11.最后就是撸我们的分享代码了

    public class MainActivity extends AppCompatActivity {
        Button shareBtn;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ShareSDK.initSDK(this);
            setContentView(R.layout.activity_main);
            shareBtn = (Button) findViewById(R.id.shareBtn);
            shareBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    OnekeyShare oks = new OnekeyShare();
                    oks.setTitle("趣分享");
                    oks.setText("我为技术带盐,我骄傲,我自豪");
                    oks.setImageUrl("http://7sby7r.com1.z0.glb.clouddn.com/CYSJ_02.jpg");
                    oks.setTitleUrl("http://wwww.baidu.com");
                    oks.show(MainActivity.this);
                }
            });
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            ShareSDK.stopSDK(this);
        }
    }
    在这里,我们的的一键分享功能就大功告成了,第三方万岁!!!

    3.ShareSDK使用重点

    虽说第三方方便,快捷,强大的帮助了开发者,但是其中也有很多坑的!卧槽,坑死爹了,官方文档写的什么玩意儿呀,这里我将把我自己遇到的坑提出来,方便以后大家不填坑。

    1.集成新浪微博分享时,创建的应用必须要与自己的工程名一致。

    2.在清单文件中的qq配置要加上自己的腾讯应用id

                <intent-filter>
                    <data android:scheme="tencent1105665723" />
                    <action android:name="android.intent.action.VIEW" />
                    <category android:name="android.intent.category.BROWSABLE" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
    3.在MaiinActivity中,记住最后要结束ShareSDK,不关闭会蹦出不知名的错误,加上为好。

        @Override
        protected void onDestroy() {
            super.onDestroy();
            ShareSDK.stopSDK(this);
        }
    4.对OneKeyShare类的了解


    5.对于微信分享集成又稍微繁琐点,它创建应用时要进行应用签名,官方提供了微信签名工具,这里在签名生成应用签名之前,必须提前把工程运行一次,这样工具才能检测到你自己的应用包名。如果是第一次创建微信应用的话,审核比较坑,说让你等七天,我也是醉了。所以,微信这块的app id 和app secret,我无法得到,只能做一些绕过审核的简单分享,仅支持图片和文字。

    好了,就说到这里吧,然后我把自己的探索成果晒晒吧:








    好了,demo链接地址:http://download.csdn.net/detail/zhangxing52077/9648892

    如果您觉得我写得比较好,比较全面,请打赏一下呗,谢谢哈大笑









    展开全文
  • 1.注册账号:首先,我们需要在share sdk官网...  然后点击我们要使用的ShareSdk,如下图:  2.添加应用:鼠标移动到“应用”菜单,选择添加应用,如下图:  3.输入应用名称,并选择Android,

    1.注册账号:首先,我们需要在share sdk官网(http://www.mob.com)注册一个账号,然后登录,进入主界面,首先就是创建我们的应用了,在右上角点击“进入后台”,如下图:

           然后点击我们要使用的ShareSdk,如下图:

            2.添加应用:鼠标移动到“应用”菜单,选择添加应用,如下图:

            3.输入应用名称,并选择Android,点击添加,如下图:

           添加成功后会跳转我们创建的应用界面,并且可以看到我们分享所需要的App Key 和App Secret,创建好了应用,下一步就是在APP中的使用了,首先看一下官方文档,点击官方文档,找到我们需要的“安卓集成文档”,就到了如下界面:

    按照右侧官方文档的流程,先配置一下我们的APP,主要是一下几个步骤:

    (1)获取ShareSDK的AppKey ,这个在我们创建好应用了之后就已经有了

    (2)下载sdk

    (3)快速集成

    (2)、(3)官网文档已经说的很清楚了,我这里就不再说明啦。

    上面说了那么多,我们用的还是sharesdk的测试账号进行分享,下面就说说如何在我们的项目中用自己的账号进行分享和登录(在这之前首先要保证在上面的测试中,分享是没有问题的,没有出现崩溃什么的,再进行我们的下一步)

    4:一般我们的项目中集成的有QQ、微信、新浪,下面我们就说说在一个项目中如何使用这三种平台进行分享和登录,第一次用的时候也是走了不少坑,希望我的文章能帮助你少走一些坑,首先我们的项目一般很少是个人的,大部分都是公司项目,所以要在这三种平台进行分享,首先要分别在这三个平台注册一个企业账号(注意:填写企业信息的时候三个平台要保持一致,不要问我为啥,为了少点坑,哈哈,如果三个平台的企业信息不一致,后面的审核APP会有很多问题,到时候又要回去改,真的是很麻烦),如果是个人,那你注册个人账号就可以了,下面我就用使用企业账号来举例,

    (1).腾讯开放平台 http://wiki.open.qq.com

    上面说了,我们要先注册账号,并填写信息,并通过审核,才有使用QQ进行第三方操作的资质呀,资质有了,先来就是该创建我们的应用了,

    看图说话,如下:

    点击“创建应用”

    选择“移动应用 安卓” ,点击“创建应用”,继续看图:

    选择“安卓应用类型”,根据自己的APP类型,自己选择,点击“确定”,看图:

    下面就是“完善信息”了,这里我也不用怎么说,该怎么写就怎么写,带*的必须写哦,需要注意的就是我们上传的安装包,可能不符合腾讯审核的规则,这个时候要使用腾讯的第三方加固(以前还是要自己写命令加固的,现在都做成软件了,直接下载加固你的APP就行),其他的就不用说了,按照要求写就行,写完了记得检查一遍哦,然后点击“提交审核”,大约需要1-2个工作日,耐心等待哈。通过审核了就可以得到我们需要的APP ID 和 APP KEY:如下图

    (2).新浪微博开放平台账号 http://open.weibo.com/

    点击“微连接”选择“移动应用”,点击“立即接入”,如下图:

       点击“继续创建”,输入“应用名称”,选择“应用平台”,点击创建,如下图:

    下面就是填写我们的应用信息了,如下图:

    这里的“Android签名” 可以通过该平台的签名工具获取,是一个apk文件,下载了安装到你的手机上,同时你的手机也要安装要审核的APP,然后打开下载的获取签名文件的app,输入你的app的包名,就可以获取到签名信息了,是不是很方便呢,剩下的信息,只有一个需要我们去另外一个平台申请,其他的直接写就好了,看图说话:

    就是这个“Android下载地址”,这个地址怎么写呢,写什么呢,而且还必须写,写错了审核还过补了,其实这个地址是我们的APP在其他平台已经上线并且可以搜索下载的地址,我这里使用的360开放平台 http://dev.360.cn/html/ad/index.html,这里要注意的是360开放平台上的账号信息要跟你其他平台上的一致,也就是都是属于同一个企业或者个人的,不然,哼哼,你的新浪微博审核是不会通过的呦,其实360就相当于是我们应用的一个下载平台,我们要先将应用在360上上线,然后回去到应用的推广地址,大致流程是下面这样子的:

    首先保证你的应用已将上线,然后点击你的应用,点击“推广下下载地址”如下图:

    点击“立即使用”,看图:

    看到没,这个应用推广地址,就是我们在申请新浪微博的时候要填写的“Android下载地址”

    好了,信息基本是填写完了,点击保存,然后提交审核,新浪微博的审核还挺快的,一个工作日,耐心等待。通过审核后,就可以获取到我们的需要的App Key和App Secret。

    审核通过后,我们还有一个重要的地方要改,要不然是授权不成功的,来吧,看图:

    那,就是这个回调页,记得,必须写哦(可以写公司的官网)。

    (3) 微信开放平台 https://open.weixin.qq.com/

    微信的审核比较严格,而且还需要付费,一年好像是300块。

    好了,开始我们的流程,登录我们注册的微信开放平台账号,点击“移动应用开发”,如下图

    点击“创建应用”

    填写基本应用的信息,这个就不多说了,自己写,接下来是填写平台信息,输入“应用官网”并选择应用平台,如下图:

    这些信息也没什么难度,直接写就好了,点击“提交审核”,大概需要7个工作日,一般3.4天就可以审核完毕。

    至此,我们在QQ、新浪微博、微信平台上的应用审核就抖已经完成了,接下来就是如何在项目中去使用了。

    5.在share sdk官网创建应用的时候,我们就已经按照官方的文档,将我们需要jar包等集成到了我们的项目中,也在manifest文件中进行了配置,如下图:

    需要的权限

    注册activity

               然后在我们的asstes文件下找到ShareSdk.xml并打开,如下图:

    (1)修改ShareSdk 的AppKey,改为你在ShareSdk官网创建的应用的AppKey,如下图:

    (2)修改各个平台的AppId和AppKey,如下图:

    QQ

    新浪微博

    微信

    好了,需要修改的我们都已经改好了,现在就可以在项目中使用啦。

    6.先说第三方登录,话不多说,直接上代码,看图说话:

    /**

    *新浪第三方登录

    */

    private voidsinaLogoin() {

    ShareSDK.initSDK(this);

    Platform sina = ShareSDK.getPlatform(SinaWeibo.NAME);

    sina.SSOSetting(true);

    authorize(sina);

    }

    /**

    *微信第三方登录

    */

    private voidweixinLogoin() {

    ShareSDK.initSDK(this);

    Platform wechat = ShareSDK.getPlatform(this,Wechat.NAME);

    wechat.SSOSetting(true);

    if(!wechat.isClientValid()) {

    Toast.makeText(mContext,

    "微信未安装,请先安装微信",

    Toast.LENGTH_LONG).show();

    }

    authorize(wechat);

    }

    /**

    * QQ第三方登录

    */

    private voidqqLogin() {

    ShareSDK.initSDK(this);

    Platform qq = ShareSDK.getPlatform(QQ.NAME);

    qq.SSOSetting(true);

    authorize(qq);

    }

    /**

    *第三方登录选择 要数据不要功能

    *

    *@paramplat

    */

    private voidauthorize(Platform plat) {

    if(plat ==null) {

    return;

    }

    plat.setPlatformActionListener(this);

    //关闭SSO授权

    plat.SSOSetting(false);

    plat.showUser(null);

    }

    回调的监听  我们要实现PlatformActionListener 这个接口,有三个回调方法,onComplete()、onError()、onCancel(),分别是授权成功、授权失败、取消授权,授权成功后,我们就可以获取到自己想要的数据了,如下图是我需要的数据:

    获取到的个人平台信息

    另外两个方法,这里就不多少了,自己要做什么处理,直接写就好啦,登录的差不多就是这些,下面来看看分享的吧。

    7.关于第三方分享,其实也不难,我们可以使用ShareSdk默认的分享界面,也可以自定义分享界面,我们先看看默认的分享是什么样子的,先看代码(官方代码):

    privatevoidshowShare(){

    ShareSDK.initSDK(this);

    OnekeyShareoks=newOnekeyShare();

    //关闭sso授权

    oks.disableSSOWhenAuthorize();

    // 分享时Notification的图标和文字  2.5.9以后的版本不调用此方法

    //oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));

    // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用

    oks.setTitle(getString(R.string.share));

    // titleUrl是标题的网络链接,仅在人人网和QQ空间使用

    oks.setTitleUrl("http://sharesdk.cn");

    // text是分享文本,所有平台都需要这个字段

    oks.setText("我是分享文本");

    // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数

    //oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片

    // url仅在微信(包括好友和朋友圈)中使用

    oks.setUrl("http://sharesdk.cn");

    // comment是我对这条分享的评论,仅在人人网和QQ空间使用

    oks.setComment("我是测试评论文本");

    // site是分享此内容的网站名称,仅在QQ空间使用

    oks.setSite(getString(R.string.app_name));

    // siteUrl是分享此内容的网站地址,仅在QQ空间使用

    oks.setSiteUrl("http://sharesdk.cn");

    // 启动分享GUI

    oks.show(this);

    }

    编译并运行后,弹出类似下图的的分享列表选择页面,点击后弹出分享窗口,点击发表后就成功发送到社交平台的话说明你已经基本集成成功了。

    就是这么简单,哈哈。

    下面再看看我们自定义的分享界面然后,这里我使用的是截屏分享:

    首先我是自定义了一个dialog, 然后点击分享的时候去截屏,看看截屏的代码:

    /**

    *截图

    */

    privateStringgetIcon() {

    String imageName =null;

    File iconDir =newFileStorage().getIconDir();

    imageName = UUID.randomUUID().toString() +".png";

    File imageFile =newFile(iconDir,imageName);

    try{

    bgView.setDrawingCacheEnabled(true);

    bgView.buildDrawingCache();

    Bitmap obtainBitmap =bgView.getDrawingCache();

    Bitmap bitmap = Bitmap.createBitmap(obtainBitmap,0,0,bgView.getWidth(),bgView.getHeight() -bottom_ll.getHeight());

    bgView.destroyDrawingCache();

    bgView.setDrawingCacheEnabled(false);

    FileOutputStream out =null;

    try{

    out =newFileOutputStream(imageFile);

    bitmap.compress(Bitmap.CompressFormat.PNG,100,out);

    }catch(FileNotFoundException e) {

    e.printStackTrace();

    }finally{

    StreamUtil.safeClose(out);//关闭流

    }

    if(bitmap !=null) {//内存优化

    bitmap.recycle();

    }

    }catch(Exception e) {

    }

    return  imageName;

    }

    注意:bgView 就是我们要截屏的View ,bottom_ll是我图片下面不需要的一些高度,这里可以自己改一下,删除了也是可以的,下面我们看看分享的代码:

    (1)微博:

    shareImagename= getIcon();

    SinaWeibo.ShareParams sp1 =newSinaWeibo.ShareParams();

    File iconDir1 =newFileStorage().getIconDir();

    File file1 =newFile(iconDir1,shareImagename);

    sp1.setImagePath(file1.getAbsolutePath());

    Platform weibo = ShareSDK.getPlatform(SinaWeibo.NAME);

    weibo.SSOSetting(true);

    weibo.setPlatformActionListener(platformActionListener);//设置分享事件回调

    //执行图文分享

    weibo.share(sp1);

    (2)QQ:

    shareImagename= getIcon();

    QQ.ShareParams sp2 =newQQ.ShareParams();

    sp2.setTitle(res.getString(R.string.app_name));

    sp2.setTitleUrl(res.getString(R.string.share_title_url));//标题的超链接

    sp2.setText(res.getString(R.string.share_Text));

    File iconDir2 =newFileStorage().getIconDir();

    File file2 =newFile(iconDir2,shareImagename);

    // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数

    sp2.setImagePath(file2.getAbsolutePath());

    // sp.setImageUrl("http://www.someserver.com/测试图片网络地址.jpg");

    sp2.setSite(getString(R.string.app_name));

    sp2.setSiteUrl(res.getString(R.string.share_title_url));

    Platform qzone = ShareSDK.getPlatform(QQ.NAME);

    qzone.setPlatformActionListener(platformActionListener);//设置分享事件回调

    //执行图文分享

    qzone.share(sp2);

    (3)微信:

    shareImagename= getIcon();

    Platform.ShareParams wechat =newPlatform.ShareParams();

    wechat.setTitle(res.getString(R.string.app_name));

    wechat.setText(res.getString(R.string.share_Text));

    File iconDir =newFileStorage().getIconDir();

    File file =newFile(iconDir,shareImagename);

    wechat.setImagePath(file.getAbsolutePath());

    wechat.setUrl(res.getString(R.string.share_title_url));

    wechat.setShareType(Platform.SHARE_WEBPAGE);

    Platform weixin = ShareSDK.getPlatform(mContext,

    Wechat.NAME);

    if(!weixin.isClientValid()) {//如果没有安装微信客户端,则提醒用户安装

    Toast.makeText(mContext,

    "微信未安装,请先安装微信",

    Toast.LENGTH_LONG).show();

    }

    weixin.setPlatformActionListener(platformActionListener);

    weixin.share(wechat);

    (4)微信朋友圈

    shareImagename= getIcon();

    Platform.ShareParams wechatMoments =newPlatform.ShareParams();

    wechatMoments.setTitle(res.getString(R.string.app_name));

    wechatMoments.setText(res.getString(R.string.share_Text));

    File iconDir4 =newFileStorage().getIconDir();

    File file4 =newFile(iconDir4,shareImagename);

    wechatMoments.setImagePath(file4.getAbsolutePath());

    wechatMoments.setUrl(res.getString(R.string.share_title_url));

    wechatMoments.setShareType(Platform.SHARE_WEBPAGE);

    Platform weixinMoments = ShareSDK.getPlatform(mContext,

    WechatMoments.NAME);

    if(!weixinMoments.isClientValid()) {

    Toast.makeText(mContext,

    "微信未安装,请先安装微信",

    Toast.LENGTH_LONG).show();

    }

    weixinMoments.setPlatformActionListener(platformActionListener);

    weixinMoments.share(wechatMoments);

    分享的监听:

    privatePlatformActionListenerplatformActionListener=newPlatformActionListener() {

    @Override

    public voidonCancel(Platform arg0, intarg1) {

    viewPager.setCurrentItem(viewPagerPosition);

    }

    @Override

    public voidonComplete(Platform arg0, intarg1,

    HashMap arg2) {

    Toast.makeText(mContext,res.getString(R.string.share_success),Toast.LENGTH_LONG).show();

    }

    @Override

    public voidonError(Platform arg0, intarg1,Throwable arg2) {

    Toast.makeText(mContext,res.getString(R.string.share_fail),Toast.LENGTH_LONG).show();

    }

    };

    好了,大功告成,至于分享,到此也就结束啦。

    写了这么多,虽然感觉写的不是很好,但自己还是很满意,毕竟是自己一字一字的写出来的,也是自己慢慢整理的,算是自己的东西了吧,第三方的东西用起来是不错,但有时候也是会碰到一些坑,这个时候不要慌,一定不要慌,还有客服呢,不要怕,哈哈,多和平台的客服交流一下,他们会给你想要的结果,好了,使用ShareSdk进行第三方分享跟登录就到这里啦,欢迎大家进行补充纠正。O(∩_∩)O哈哈~

    作者:起个牛逼的昵称 链接:http://www.jianshu.com/p/db4136d70226 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    展开全文
  • 因为ShareSDK的功能众多,因此我将一条一条的实现每个功能,并将操作步骤记录下来。 ShareSDK基本设置:见下方“3、操作步骤”——2)~4)。   一、QQ登陆、获取用户信息 1、参考资料: QQ客服提供参考网址:...

     

    因为ShareSDK的功能众多,因此我将一条一条的实现每个功能,并将操作步骤记录下来。

    ShareSDK基本设置:见下方“3、操作步骤”——2)~4)。

     

    一、QQ登陆、获取用户信息

    1、参考资料:

    QQ客服提供参考网址:腾讯开放平台01腾讯开放平台02QQ互联

    2、最终效果:

    电脑展示效果:

    获取到的用户信息:

    利用获取到的用户信息,我们即可使用这些信息,在我们的APP中干各种事情。

     

    下面阐述获取到的信息的含义:

    expiresIn:凭证有效时间,单位:秒

    secret:第三方用户唯一凭证密钥,即appsecret

    nickname:QQ昵称

    icon:QQ头像

    pay_token:从手Q登录态中获取的pay_token的值

    unionid:此接口用于获取用户个人信息。开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用,可通过获取用户的unionid来区分用户的唯一性,因为只要是同 一个QQ互联平台帐号下的移动应用、网站应用,用户的unionid是唯一的。换句话说,同一用户,对 同一个QQ互联平台下的不同应用,unionid是相同的。(Unionid机制暂未对外开放,开发者只能通过 申请获得权限,后续会开放给所有开发者)(信息来自:SDK文档)(获取方法:文档

    iconQzone:QQ空间头像

    pfkey:登录时候获取,跟平台来源和openkey根据规则生成的一个密钥串。注:腾讯公司自己研发的应用固定传 pfkey="pfkey"。登录时候跳转到应用首页后,URL后会带该参数。由平台直接传给应用,应用原样传给平台即可。

    pf:平台标识信息:平台-注册渠道-系统运行平台-安装渠道-业务自定义,如果业务没有自定义,格式可以为平台-渠道-操作系统。

          例如: qq_m_qq-10000144-android-10000144-xxxx

          qq_m_qq 表示 手Q平台启动,用qq登录态

    secretType:

    userID:用户的openid,登录时候获取。例如:userId = “559B3E350A3AC6EB5CA98068AE5BA451”(openid)。OpenID是此网站上或应用中唯一对应用户身份的标识,网站或应用可将此ID进行存储,便于用户下次登录时辨识其身份,或将其与用户在网站上或应用中的原有账号进行绑定。

    expiresTime:过期时间

    token:Token认证,参考文档

    3、操作步骤

    1)、注册腾讯开放平台开发者(上方“注册”)

    用于在开发者后台创建应用,拿到应用的APP ID和APP KEY,绑定在ShareSDK插件的脚本中,完成ShareSDK与腾讯的对接

    2)、注册MobSDK开发者,成为ShareSDK的开发者

    用于拿到应用的Appkey和App Secret,绑定在ShareSDK插件的脚本中,完成与ShareSDK的对接

    3)、在Unity导入ShareSDK插件

    只导入压缩包中的unitypackage即可

    4)、切换到对应的平台,将ShareSDK脚本挂载到MainCamera,将第一步获取到的APP ID和APP KEY填到ShareSDK—Dev Info—QQ的对应位置,第二步获取的信息填到相应位置

    平台为Android或IOS,暂且必须是MainCamera,挂载到其他物体的方法待补充

    该脚本可编辑,注释掉不需要的平台

    5)、给MainCamera添加Skode_Share脚本,内容如下:

     

    二、QQ分享给好友

    展开全文
  • ShareSDK

    2014-07-28 10:34:16
    Name:ShareSDK Author:Chen GangQiang Code Repository:https://github.com/ShareSDKPlatform/C2DXShareSDKSample Last Update:2014-01-13 Compatible with: Platform:IOS, Android API Language:C++ ...

    Thumb_1(1)

    Brief

    ShareSDK is a service gives mobile apps sharing capabilities in minutes.

    Description

    Production description:
    ShareSDK is a service gives mobile apps sharing capabilities in minutes, it provides instant track posting to 40+ major social platforms with social analytics to developers understand the social behavior of their apps with our social analytics dashboard.

    Getting Started Guide

    Step1: Download the cocos2d-x components of the ShareSDK

    Open Github download the C2DXShareSDKSample projects. The project C2DXShareSDK folder copy to your project.

    Step2: Modify AppDelegate file

    Open the “AppDelegate.cpp” file, import the header file “C2DXShareSDK.h”. Such as:

    #include "C2DXShareSDK.h"
    

    In AppDelegate :: applicationDidFinishLaunching method, add the following code to initialize ShareSDK and configure the social platform information.

    bool AppDelegate::applicationDidFinishLaunching() {
    
            //……        
            C2DXShareSDK::open(CCString::create("api20"), false);
    
            CCDictionary *sinaConfigDict = CCDictionary::create();
            sinaConfigDict -> setObject(CCString::create("568898243"), "app_key");
            sinaConfigDict -> setObject(CCString::create("38a4f8204cc784f81f9f0daaf31e02e3"), "app_secret");
            sinaConfigDict -> setObject(CCString::create("http://www.sharesdk.cn"), "redirect_uri");
            C2DXShareSDK::setPlatformConfig(C2DXPlatTypeSinaWeibo, sinaConfigDict);
    
            //……
    }
    

    Note: where the configuration items in social platform configuration information, refer to Social Platform Configuration Item Description document.

    Share

    First, create a structure to share content, as follows:

    CCDictionary *content = CCDictionary::create();
    content -> setObject(CCString::create("This is a test content"), "content");
    content -> setObject(CCString::create("http://img0.bdstatic.com/img/image/308342ac65c10385343da168d569113b07ecb8088ef.jpg"), "image");
    content -> setObject(CCString::create("Test title"), "title");
    content -> setObject(CCString::create("Test description"), "description");
    content -> setObject(CCString::create("http://sharesdk.cn"), "url");
    content -> setObject(CCInteger::create(C2DXContentTypeNews), "type");
    

    Then the content object incoming share interfaces. such as:

    C2DXShareSDK::showShareMenu(NULL, content, shareResultHandler);
    

    shareResultHandler is callback method, which is defined as follows:

    void shareResultHandler(C2DXResponseState state, C2DXPlatType platType, CCDictionary *shareInfo, CCDictionary *error)
    {
        switch (state) {
            case C2DXResponseStateSuccess:
                CCLog("share success!");
                break;
            case C2DXResponseStateFail:
                CCLog("share fail!");
                break;
            default:
                break;
        }
    }
    

    User Authorization

    To get the authorized users information by call the C2DXShareSDK::geUserInfo method . Code is as follows:

    C2DXShareSDK::getUserInfo(C2DXPlatTypeSinaWeibo, getUserResultHandler);
    

    getUserResultHandler is callback method, which is defined as follows:

    void getUserResultHandler(C2DXResponseState state, C2DXPlatType platType, CCDictionary *userInfo, CCDictionary *error)
    {
        if (state == C2DXResponseStateSuccess)
        {
            //Output user information
            CCArray *allKeys = userInfo -> allKeys();
            for (int i = 0; i < allKeys -> count(); i++)
            {
                CCString *key = (CCString *)allKeys -> objectAtIndex(i);
                CCObject *obj = userInfo -> objectForKey(key -> getCString());
    
                CCLog("key = %s", key -> getCString());
                if (dynamic_cast(obj))
                {
                    CCLog("value = %s", dynamic_cast(obj) -> getCString());
                }
                else if (dynamic_cast(obj))
                {
                    CCLog("value = %d", dynamic_cast(obj) -> getValue());
                }
                else if (dynamic_cast(obj))
                {
                    CCLog("value = %f", dynamic_cast(obj) -> getValue());
                }
            }
        }
    }
    

    Integration for iOS (Not released iOS version of the application can skip this section)

    Step1: The iOS version of ShareSDK into the project:

    Login ShareSDK http://sharesdk.cn official website to download and extract the latest version of the SDK. If you have not downloaded yet, please click here to download or access http://sharesdk.cn/Download. After extracting the following diagram:

    The ShareSDK_vX.XX (XXX represents SDK version number) directory are copied to your cocos2d-x project. Figure:

    The ShareSDK into the project, and add the appropriate dependencies. This step can refer to: iOS Quick Integration Guide in the first, the second step. After execution, as shown below:

    Step2: Modify AppController file

    Open the “AppController.mm” file, add ShareSDK.h header file:

    #import 
    

    Add handleOpenURL method, as follows:

    @implementation AppController
    
    //……
    
    - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
    {
        return [ShareSDK handleOpenURL:url sourceApplication:nil annotation:nil wxDelegate:nil];
    }
    
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {
        return [ShareSDK handleOpenURL:url sourceApplication:sourceApplication annotation:annotation wxDelegate:nil];
    }
    

    In the integrated WeChat, QQ, Google*, Pinterest, RenRen platform, you need to import the relevant type. Code is shown below:
    <pre>
    #import “WXApi.h” //WeChat
    #import “WBApi.h” //Tencent Weibo
    #import <TencentOpenAPI/QQApiInterface.h> //QQ Connect
    #import <TencentOpenAPI/TencentOAuth.h> //QQ Connect
    #import <RennSDK/RennSDK.h> //人人网
    #import <Pinterest/Pinterest.h> //Pinterest
    #import <GoogleOpenSource/GoogleOpenSource.h> //Google*
    #import <GooglePlus/GooglePlus.h> //Google+

    @implementation AppController

    //……

    • (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:launchOptions {
      //……
      //Import WeChat Class
      ];
      //Import Tencent Weibo Class
      ];
      //Import QQ Class
      tencentOAuthCls:];
      //Import RenRen Class
      ];
      //Import Pinterest Class
      ];
      //Import Google+ Class
      shareClass:];
      //……
      }
      </pre>
      h1. Integration for Android
      **Note
      : This section describes how to integrate ShareSDK into coco2d-x with**custom JNI codes**, if you want to find ”**how to integrate ShareSDK with pure Java codes**”, please click HERE . And if you want to find ”**how to integrate ShareSDK with plugin-x**”, please click HERE .
      h2. Integration Steps
      1 Download the latest version of ShareSDK from our official website and extract it.
      2 Refer to the “”Five Steps to Integrate ShareSDK“:https://github.com/ShareSDKPlatform/ShareSDK-for-Android/wiki/Five-Steps-to-Integrate-ShareSDK” chapter, use “**copy jars and resources into your project**” way to import ShareSDK to your project. After these two steps, your project should include the followings: Java source codes of OnekeyShare. If you integrate Wechat or Yixin, your project should include the package wxapi or yxapi. Resources of ShareSDK and OnekeyShare must have been added into your “res” directory. Jars of ShareSDK must have been copied into your “libs” directory. Besides resources of cocos2d-x, there is a SahreSDK.xml file in your “assets” directory.
      3 Refer to the “”Five Steps to Integrate ShareSDK“:https://github.com/ShareSDKPlatform/ShareSDK-for-Android/wiki/Five-Steps-to-Integrate-ShareSDK” chapter, modify the “AndroidManifest.xml” file.
      4 Applications information in “ShareSDK.xml” are public keys for demonstration. Please change the information of each platform in this file to your application’s refering to the “”Five Steps to Integrate ShareSDK“:https://github.com/ShareSDKPlatform/ShareSDK-for-Android/wiki/Five-Steps-to-Integrate-ShareSDK” chapter.
      5 Pull the source codes on Github , and copy the followings into your project: Copy “cn.sharesdk.ShareSDKUtils” into your “src”. Copy “libs/armeabi” to your “libs”.
      6 Open the class you extend from Cocos2dxActivity, add the following line into its onCreate method:
      <pre>
      ShareSDKUtils.prepare;
      </pre>
      h2. Explanation of Java Codes
      Basically there is only a ShareSDKUtils Java class, and what you have to do in Java codes is adding the**prepare* in your subclass of Cocos2dxActivity. However, if you want to add more parameters of sharing (the example on github only provides very few parameters to share), you may have to modify the following methods:

      nativeMapToJavaMap(HashMap)

    This method is to transfer the name of the parameters to share from the JNI type to the Java types. If you add the share parameter in native codes, you need to modify this method, add a new rule to translate the name of this parameter to ShareSDK. HERE is the table lists the name of the share parameters in ShareSDK.

    onekeyShare(HashMap)
    

    This method calls OnekeyShare module of ShareSDK, like the method above, if you want to modify the share parameters in native codes, you may need to modify this method.

    It is important to note that ShareSDKUtils.prepare() must be called in the main thread, and before any operation of ShareSDK. Otherwise it will result in an error in ShareSDKUtils initializing.

    Explanation of Native Codes

    Using custom JNI codes is not an encouraged way of Android platform to integrating ShareSDK, since you have to add a ton of native-java reflection code which is inefficient and prone to errors. But this method can shield the differences between the platforms by c/c++ codes, and also be complementary to the plugin-x.

    Native codes are basically the reflection between native and java codes. However, like Java codes, if you want to modify the native codes, you may need to be carefully with the following methods:

    Java_cn_sharesdk_ShareSDKUtils_onCancel
    Java_cn_sharesdk_ShareSDKUtils_onComplete
    Java_cn_sharesdk_ShareSDKUtils_onError
    

    These three methods are java to native action callbacks, don’t change their names.

    hashmapToCCDictionary
    CCDictionaryToHashMap
    

    These two methods process the transform between HashMap and CCDictionary.

    setPlatformDevInfo
    

    This is not a necessary method in Android, since we have a more convenient way to configure your applications information in the file “ShareSDK.xml”.

    展开全文
  • ShareSDK 集成

    2018-07-28 10:47:32
    1,在官网 创建应用 获取AppKey 和App Secret       配置gradle 2,打开项目根目录的build.gradle,在buildscrip–&gt;dependencies 模块下面添加 ...3,在使用到Mob产品的module下面的build...
  • 前言:分享功能在app上面也是一个常见的功能,在这方面shareSDK的分享还是不错的,本文便讲解下详细的集成步骤。 1 首先进入mob官网:(http://mob.com )进行账号登录(没有账号的可先进行注册再登录) 2 appkey的...
  • H5混合开发转Android 原生开发,之前也是用的友盟分享、微信原生、QQ原生、微博原生分享,今天这个项目恰好是用的mob的sharesdk分享,老实说,还是第一次使用,一开始接手项目的时候,还以为mob是个后台。...
  • 稍等
  • Duplicate class cn.sharesdk.framework.CustomPlatform found in modules ShareSDK-Core-3.7.4.jar (cn.sharesdk:OneKeyShare:3.7.4) and ShareSDK-Core-3.7.4.jar (cn.sharesdk:ShareSDK:3.7.4) Duplicate class ...
  • 之前用过这个几次了,而每次都没有记录...2、现在他们的服务特别人性化,解压SDK之后会发现有一个"双击此批处理文件可以生成一个快速集成ShareSDK的目录.bat"这样一个文件,打开之后按照提示输入你的应用包名,他
  • 最近领导让添加ios 微信分享视频的功能,之前做的只有微信分享本地图片的功能。 查看官网并没有找到答案,后来在其官网论坛中...可以支持就好办了。。 下载ShareSDK 简洁版(v3.2.1) 目录
  • ShareSDK最新的是3.x版本,以前老的2.x需要更新,可能出现的问题:微信支付成功不调用onResp、openURL、handleOpenURL等方法
  • ShareSDK
  • 最近在做ShareSDK的微信分享的时候遇到了点问题,就是分享的时候选择微信好友或者微信朋友圈会打开一下微信然后界面都还没加载出来就闪退。这个问题我在网上找了好多种的可能的情况以及处理办法,最终找到了适合于我...
  • 今天设计又给了几个界面的标注,要求完善UI,其中就包括分享界面,于是我立即询问shareSDK的技术支持(找到shareSDK的官网,然后点击企业QQ就可以询问了),技术支持给的解释是,如果要用shareSDK自带的UI,分享界面...
  • 以前自己试过ShareSDK的微信登录,怎么也不能正常授权登录。感觉小李向我分享了他的ShareSDK的使用经验,使我避免了很多弯路。曾经使用Mob提供的测试微信AppId和AppSecret只能进行微信分享,不能登录,因为没有签名...
  • shareSDK.xml 失效,分享失败原因问题描述在项目中用了shareSDK的第三方分享工具,之前一直正常使用,在shareSDK.xml中配置也都正常,但最近突然出了问题。各平台都分享失败,之前隐藏的分享平台居然显示出来了。...
  • shareSDK

    2016-11-25 15:09:24
    shareSDK第三方登录跟分享差不多,比较简单,前面已有介绍。这里简单写一下第三方登录吧。 1、首先:我用到了QQ、微信、新浪这三个平台的登录,需要到它们各自的开发者平台注册开发者账号,这是我的QQ创建应用...
  • 在使用ShareSDK的时候,遇到的有一个问题是要在QQ上分享图片,但是有个问题是无法分享图片,只能分享个网址,点击打开是个网址,这就很尴尬了。终于在Mob客服Water?那找到了解决方法 其他步骤按照官网上的步骤来 ...
1 2 3 4 5 ... 20
收藏数 6,080
精华内容 2,432
关键字:

sharesdk