Android ShareSDK快速实现分享功能
作者:杰瑞教育
第一步 :获取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 for Android Sample”包含ShareSDK的功能演示代码和apk文件,Sample源码的JavaDoc在中。 “ShareSDK for Android Services”包含ShareSDK已经发布的“插件服务”,暂时我们只提供了“评论与赞”服务,压缩包中已经提供了此插件服务的依赖库、示例代码、JavaDoc和apk文件。
第二步:导入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、快速生成项目
由于直接复制jar包和资源的集成方式比较麻烦,ShareSDK提供了快速集成的程序,在Windows下可以直接双击执行,完成以后可以通过复制目标目录中的文件到您项目中覆盖就行了。 极大简化了“直接复制jar和资源”这种集成方式的操作步骤。 对于你的项目是刚开发或者想写一个Demo测试ShareSDK功能,可以使用这种方法快速集成
第三步:添加应用信息
有三种方式
第一种:在ShareSDK的应用管理后台中配置,使用此方法需要调用ShareSDK.initSDK(context,你的应用在sharesdk注册时返回的AppKey)方法进行初始化,如果以后更改了注册信息可以直接从网上更改,而不用重新发布新版本进行更新。(优先级最高)。
第二种:通过代码配置“setPlatformDevInfo(String, HashMap<String, Object>)”方法,使用此方法需要调用ShareSDK.init(context,你的应用在sharesdk注册时返回的AppKey)方法进行初始化。(优先级中)。
第三种:通过“assets/ShareSDK.xml”文件来配置,次方式会以明文存在,但这种方式最为简单。(优先级最低)。
这三种方式开发者可以自行选择,不过这三种设置方式各有区别:第一种方式可以实现“动态配置应用信息”的功能,但是一旦脱离网络,ShareSDK可能无法运作;第三种方式是优先级最低的方式,但是它最为方便、集中;最后使用代码设置的方式是最灵活的方式,第二种方式开发者可以在代码里面写死应用信息,也可以通过私有协议,从自己的服务器上动态获取应用注册信息,其优先级居第一种和第二种之间。 使用ShareSDK.xml配置注册信息
<ShareSDK AppKey="填写您在ShareSDK上注册到的AppKey" /> <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配置文件
ShareSDK.initSDK(Context,"你的应用在Sharesdk注册时返回的AppKey"); 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.initSDK()方法后调用,如果调用了ShareSDK.stopSDK()需要在ShareSDK.initSDK后重新调用ShareSDK.setPlatformDevInfo()方法。 关于应用信息不同字段的更详细解释,可以参考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:
<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" />
如果您的项目集微信或者微信朋友圈,请查看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中即可。
第五步:添加代码
打开您项目的入口Activity,在其onCreate中插入下面的代码: 如果使用ShareSDK.xml方式配置调用
ShareSDK.initSDK(this);
如果使用代码配置应用注册信息或者应用后台配置应用注册信息,调用
ShareSDK.initSDK(this,”androidv1101″);
androidv1101:是你的应用在ShareSDK注册应用信息时返回的AppKey。 代码会初始化ShareSDK,此后对ShareSDK的操作都以此为基础。如果不在所有ShareSDK的操作之前调用这行代码,会抛出空指针异常。
效果图: