帮助与文档

> >

一、获取ShareSDK

为了集成ShareSDK,您首先需要到ShareSDK官方网站注册并且创建应用,获得ShareSDK的Appkey,然后到SDK的下载页面下载SDK的压缩包,解压以后可以得到如下图的目录结构:

ShareSDK在“ShareSDK for Android”目录下,此目录中的“Libs”包含“MainLibs”和“OnekeyShare” 分别是ShareSDK的核心库和“快捷分享”的源码库,说明文档也在“ShareSDK for Android”目录下,集成ShareSDK前请务必仔细阅读。 “ShareSDK for Android ApiDoc”包含Mainlibs和OnekeyShare的JavaDoc,供开发者开发时查阅。

二、导入ShareSDK

ShareSDK有三种集成方式:

1、直接复制jar包到目标项目libs目录

直接复制jar和资源的方式,可以参考ShareSDK的Sample项目。 使用复制jar的方法,需要除了复制MainLibs/libs中的jar外,还需要复制MainLibs/res中图片和strings,否则会出现授权时找不到资源的问题。 而且如果您的项目也集成了快捷分享,还需要复制OneKeyShare/src中的源码、OneKeyShare/res中的资源,如果你的项目里没有android-support-v4的jar需要把OneKeyShare/libs下的android-support-v4的jar到您的项目中。

2、快速生成项目

详细文档2

由于直接复制jar包和资源的集成方式比较麻烦,ShareSDK提供了快速集成的程序,在Windows下可以直接双击执行,或Linux/Mac OS下通过终端启动执行 这个程序会自动搜集集成SDK所需要的jar和资源,完成以后可以通过复制目标目录中的文件到您项目中覆盖就行了。 极大简化了“直接复制jar和资源”这种集成方式的操作步骤。 对于你的项目是刚开发或者想写一个Demo测试ShareSDK功能,可以使用这种方法快速集成

3、项目引用

下面演示如何通过项目引用的方式集成ShareSDK:

1)将ShareSDK下的Libs目录解压,然后在Eclipse中,选择“File”->“Import”,并选择“Existing Projects into Workspace”:

详细文档3

并在“下一步”的页面中,选择上文的解压目录:

详细文档4点击“确定”,Eclipse会自动找到“OnekeyShare”、“Sample”、“ShareSDK(即MainLibs)”、“Socialization(即评论与赞的依赖项目)”和“SocializationSample”目录下的两个项目。

如果您不需要快捷分享功能,可以取消OneKeyShare项目的勾选,如果您不需要集成评论与赞服务,可以取消Socializaion项目的勾选。否则请按“确定”,导入项目。 下面简单说明MainLibs和OnekeyShare的集成,Socializaion的集成类似于OnekeyShare,将在后文详细说明。

2)被导入的三个项目默认是“Is Labrary”的,而且OneKeyhare也默认引用了ShareSDK(即MainLibs),所以您并不需要为这两个项目做更多的设置。但是如果您修改了它们的相对路径,使之不在同一目录下,则需要手动修改其引用方式。具体操作和下面步骤类似。

3)右键您的项目,选择“properties”。在弹出的窗口左侧选择“Android”,然后转至右下侧的“Library”中点击“Add”,分别选择“MainLibs”和“OneKeyhare”,然后保存设置,退出属性窗口。

详细文档5

完成上述步骤,“刷新”并“清理”一下您的项目 若提示错误 解决办法:Onekeyshare和Sharesdk在项目的根目录里的project.properties配置文件里设置了target=android-8,如果没有此版本的Adnroid SDK请修改你有的Android SDK版本后保存。项目的编码格式为UTF-8。

接下来就是配置不同平台的应用信息和注册授权以及快捷分享的Activity了。 对于1.2.0以前已经集成ShareSDK,现在要升级的开发者,可以参考“复制jar和资源文件”的方式来升级SDK,也可以将您libs中对ShareSDK所引用的jar删除,然后依照上述的步骤重新引用。由于ShareSDK 2.x并不兼容1.x的版本,因此会有一些代码需要改动。主要的修改原则是将所有包含“Weibo”名称的字段和方法,以“Platform”来替换;AbstractWeibo被拆分为两个,对于ShareSDK而言的静态方法被分配到类ShareSDK中,其他的和具体平台操作有关的成员,被分配到类Platform中。更多的详细内容,可以参考我们Wiki上的升级指南。 ShareSDK的快捷分享只提供源码,并没有编译好的jar。MainLibs的libs目录中包含的是ShareSDK的核心类库,不同的jar对应不同的平台,其对应关系可以参考后文的平台对应列表。对于大部分的开发者,这些平台并不都是需要的,这时候可以直接删除此目录下不需要平台的jar包即可,直到后续需求变更,需要添加新的平台,再复制新平台的jar到此目录下就行了。

三、添加应用信息

有三种方式

第一种:在ShareSDK的应用管理后台中配置,使用此方法默认集成ShareSDK即可完成,如果以后更改了注册信息可以直接从网上更改,而不用重新发布新版本进行更新。(优先级最高)

第二种:通过代码配置“setPlatformDevInfo(String, HashMap<String, Object>)”方法。(优先级中)

第三种:通过“assets/ShareSDK.xml”文件来配置,次方式会以明文存在,但这种方式最为简单。(优先级最低)

这三种方式开发者可以自行选择,不过这三种设置方式各有区别:第一种方式可以实现“动态配置应用信息”的功能,但是一旦脱离网络,ShareSDK可能无法运作;第三种方式是优先级最低的方式,但是它最为方便、集中;最后使用代码设置的方式是最灵活的方式,第二种方式开发者可以在代码里面写死应用信息,也可以通过私有协议,从自己的服务器上动态获取应用注册信息,其优先级居第一种和第二种之间。 使用ShareSDK.xml配置注册信息示例

<SinaWeibo     
SortId="此平台在您分享列表中的位置,整型,数值越大越靠后"     
AppKey="填写您在新浪微博上注册到的AppKey"     
AppSecret="填写您在新浪微博上注册到的AppSecret"     
Id="自定义字段,整型,用于您项目中对此平台的识别符"     
RedirectUrl="填写您在新浪微博上注册的RedirectUrl"     
ShareByAppClient="是否使用客户端进行分享"     
Enable="布尔值,标记此平台是否有效" />

ShareSDK.xml以XML格式存储数据,每一个平台一个块,除了社交平台外,开发者在ShareSDK注册应用时得到的Appkey需要填写在块“ShareSDK”中,如果此Appkey不是开发者自己的Appkey,则将来在ShareSDK应用后台的统计数据将不正确。ShareSDK的每一个平台都具备SortId、Id、Enable四个字段,除此之外的字段(如新浪微博的AppKey、AppSecret、RedirectUrl、ShareByAppClient等字段)需要到目标平台上注册应用以后得到,请正确填写这些字段的数据,否则ShareSDK无法完成授权,则后续的其它操作也将无法执行。

代码配置注册信息示例(演示初始化新浪微博配置信息) 因为各个分享平台可以设置的配置信息不同,具体分享平台需要设置哪些配置信息请参考sample里的ShareSDK.xml配置文件

HashMap<String,Object> hashMap = new HashMap<String, Object>();     
hashMap.put("Id","1");     
hashMap.put("SortId","1");     
hashMap.put("AppKey","568898243");     
hashMap.put("AppSecret","38a4f8204cc784f81f9f0daaf31e02e3");    
hashMap.put("RedirectUrl","http://www.sharesdk.cn");     
hashMap.put("ShareByAppClient","true");     
hashMap.put("Enable","true");     
ShareSDK.setPlatformDevInfo(SinaWeibo.NAME,hashMap);

关于应用信息不同字段的更详细解释,可以参考ShareSDK.xml文件头部的说明。

四、配置AndroidManifest.xml

不同的集成度需要在AndroidManifest.xml中添加的内容不一样。但是首先您需要添加下面的权限列表:

<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.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.INTERNET"/>

这些权限将允许您的项目和ShareSDK判断当前应用是否“前置”、获取连接网络的权限、获取您的设备网络状态的权限、实现https安全连接的权限、读取手机设备状态的权限和保存必要配置的权限。一般来说,即便不集成ShareSDK,大部分的项目也都会注册申请这些权限。

其次,为了授权操作可以顺利完成,需要在application下注册下面的Activity:

!-- 以MobApplication作为项目Application -->
<application
       android:name="com.mob.MobApplication">

       <!-- 其它的activity -->

       <!-- ShareSDK的activity -->
<activity
     android:name="com.mob.tools.MobUIShell"
     android:theme="@android:style/Theme.Translucent.NoTitleBar"
     android:configChanges="keyboardHidden|orientation|screenSize"
     android:windowSoftInputMode="stateHidden|adjustResize" >
<!-- ShareSDK3.1.0版本之前才需要在MobUIShell下面注册此意图,3.1.0版本之后(包含3.1.0)不需要注册此intent-->
     <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>

    <!-- 调用新浪原生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>

    <!--集成line客户端登录授权,需要添如下格式的过滤器-->
    <intent-filter>	
	<data android:scheme="line.1477692153" />
	<action android:name="android.intent.action.VIEW"/>
	<category android:name="android.intent.category.BROWSABLE" />
	<category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

 </activity>
<!-- 填写您从Mob开发者后台中得到的Appkey和AppSecret -->
<meta-data android:name="Mob-AppKey" android:value="您的AppKey"/>
<meta-data android:name="Mob-AppSecret" android:value="您的AppSecret"/>
</application>

(3.1.0版本之后(包含3.1.0)才需要注册此Activity)如果集成QQ分享,或者使用QQ客户端来进行QQ空间的分享,须要在此处添加一个回调activity,对ACTION_VIEW事件的过滤器,其中的scheme是“tencent”前缀再开发者应用的加上appId。如果此Activity和过滤器不设置,则分享结束以后不能得到正确的回调。

<activity
     android:name="cn.sharesdk.tencent.qq.ReceiveActivity"
     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="tencent100371282" />
     </intent-filter>
</activity>

如果您的项目集微信或者微信朋友圈,请查看AndroidManifest.xml配置文件里的package路径,需要在package目录下创建wxapi目录再放置WXEntryActivity。 没有此activity在微信分享后回调会检查是否有此activity,没有将会报错。

<activity     
    android:name=".wxapi.WXEntryActivity"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"     
    android:configChanges="keyboardHidden|orientation|screenSize"     
    android:exported="true"     
    android:screenOrientation="portrait" />

而如果您的项目集易信的两个平台,请查看AndroidManifest.xml配置文件里的package路径需要在package目录下创建yxapi目录在放置回调Activity:

<activity     
    android:name=".yxapi.YXEntryActivity"     
    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:configChanges="keyboardHidden|orientation|screenSize" 
    android:exported="true"     
    android:screenOrientation="portrait" />

这两个类的路径是需要根据您项目的包名来确定,如果路径错误,您将收不到微信和易信客户端的操作回调,因此ShareSDK也无法给予您操作回调。为了避免出错,请使用相对路径的方式,直接复制上面的代码到您的AndroidManifest.xml中即可

五、添加代码

添加代码现说下ShareSDK配置appkey和appsecret的配置,前面配置Manifest文件的时候已经有说明在application中配置节点等;

配置AppKey和AppSecret有两种方式:

(1)通过AndroidManifest配置

(2)通过代码配置

以上方法择一即可,建议使用第一种方式进行配置。

第一种:通过AndroidManifest配置:

(1)在Application节点下添加以下属性:

android:name="com.mob.MobApplication"

注意:如果你有自己的Application类,那么也可以让你的Application类继承MobApplication即可。

(2)在Application节点下添加以下子节点:

<!-- 通过AndroidManifest配置AppKey和AppSecret,如果你选择通过代码配置,则不需要配置以下meta-data -->
<meta-data android:name="Mob-AppKey" android:value="你的AppKey"/>
<meta-data android:name="Mob-AppSecret" android:value="你的AppSecret"/>

第二种:通过代码配置:

如果选择通过代码配置,则不需要继承MobApplication,只要在使用ShareSDK之前,调用以下代码:

// 通过代码注册你的AppKey和AppSecret
MobSDK.init(context, "你的AppKey", "你的AppSecret");

接下来就可以调用授权、获取资料、分享等操作了,详细的使用方法,请参考:

1、授权与取消授权

2、获取授权用户资料

3、第三方登陆

4、任意api调用

 

onekeyshare分享调用九宫格方法:

private void showShare() {
 OnekeyShare oks = new OnekeyShare();
 //关闭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);
 }

六、为不同平台定义差异化分享内容(不需要可以忽略)

自定义分享demo下载:one、、two

快捷分享允许开发者设置了统一的分享模板以后,为不同平台设置差别化的分享内容。为了实现这个功能,需要为快捷分享提供一个ShareContentCustomizeCallback的实例,并参考下面的伪代码设置到快捷分享中:

OnekeyShare oks = new OnekeyShare();
// 参考代码配置章节,设置分享参数
//通过OneKeyShareCallback来修改不同平台分享的内容
oks.setShareContentCustomizeCallback(new ShareContentCustomizeDemo());
oks.show(context);

ShareContentCustomizeCallback是一个接口,使用时需要实现其onShare(Platform, ShareParams)方法。此方法被回调的时候会传递一个即将执行分享的平台实例和即将被分享的分享内容(ShareParams)。开发者可以通过修改这个ShareParams参数完成分享内容根据平台的差异化。

/**
 * 快捷分享项目现在添加为不同的平台添加不同分享内容的方法。
 *本类用于演示如何区别Twitter的分享内容和其他平台分享内容。
 */

public class ShareContentCustomizeDemo implements ShareContentCustomizeCallback {

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

}

七、自定义外部回调(不需要可以忽略)

新版本的快捷分享添加了一个callback的Extra,可以在启动快捷分享的时候,设置一个callback给它,于是快捷分享操作结束以后,不再调用自己的callback,而是调用从外部设置进来的callback。设置方法和其他的extra类似:

OnekeyShare oks = new OnekeyShare();
// 参考代码配置章节,设置分享参数
// 设置自定义的外部回调
oks.setCallback(new OneKeyShareCallback());
oks.show(context);

上述代码中的OneKeyShareCallback是一个实现了PlatformActionListener的类,因此它有onComplete、onError和onCancel等方法。启动快捷分享的时候将OneKeyShareCallback的类名传递进去,快捷分享自己会尝试创建其实例,如果创建失败或者没有传递callback字段,则使用默认的callback,如果成功,则以后会将分享结果给这个类处理。

八、授权页面标题栏去掉ShareSDK Logo部分(不需要可以忽略)

更多的授权页面UI修改参考下面这个demo,比如隐藏标题栏、标题文字和样式修改、反回按钮修改、启动授权页面时的动画自定义或禁用动画等;可以参考《自定义授权界面

参考sdk说明文档,继承一个AuthorizeAdapter的类,然后重写其onCreate方法,并在方法的开始添加
hideShareSDKLogo(),具体步骤可以参考官网例子Sample下的MyAdapter.java文件,如图所示:隐藏logo1

保存以后,将此类注册到AndroidManifest.xml的ShareSDKUIShell下面,如图所示:

自定义

九、混淆设置

只需要配置如下混淆处理,其他的jar包及onekeyshare代码不需要特殊处理;

	-keep class cn.sharesdk.**{*;}
	-keep class com.sina.**{*;}
	-keep class **.R$* {*;}
	-keep class **.R{*;}
	-keep class com.mob.**{*;}
	-dontwarn com.mob.**
	-dontwarn cn.sharesdk.**
	-dontwarn **.R$*

 

备注一:平台对应列表

备注二:应用信息注册地址列表

相关文档