http://blog.csdn.net/icanbeto/article/details/40078367
一、实现的效果图 二、项目结构目录(youtui-lib文件下)
三、编码前的准备工作
1.申请应用 AppKey
注意:需要申请友推appkey和你需要登录分享平台的appkey
(1)友推appkey申请
在首页http://youtui.mobi/的下方点击添加我的应用即可一步步完成申请
(2)申请社交平台appkey
集成前您需要为您的应用在需要集成的社交网站开放平台申请账号(一般一个工作日可完成审核),否则只能调用系统的分享菜单,无法跟踪分享的回调事件及统计。
QQ、QQ空间的可以使用友推提供的appkey,新浪微博、腾讯微博的也可以使用友推提供的appkey(但无法使用SSO免登,消息来源显示友推),微信、人人网的须要自己应用申请。
[td]2、获取Libs
请点击下载: youtui-lib.rar
3.将youtui-lib项目库和应用工程放在同一个目录下
在 Package Explorer 中右键点击工程的根目录,选择 Properties(属性),然后点击,在Android选项点击Add添加youtui-lib
如下图所示:(请检查youtui_lib的Properties 是否勾选Is library)
四、详细的编码实现
1.注册需要分享的平台
1.1.配置各分享平台key,该配置文件为youtui_sdk.xml,配置完放入工程的assets文件夹。
2.如果需要分享到哪个平台就将该平台的Enable属性设置为true.
3.如果需要将某个平台排列到前面,只需要改变它在youtui_sdk.xml文件中的位置即可。
4.QQ、QQ空间的可以使用友推提供的appkey,新浪微博、腾讯微博的也可以使用友推提供的appkey(但无法使用SSO免登,消息来源显示友推),微信、人人网的须要自己应用申请。
各平台需要注意的事项:
新浪微博:
SSO免登,新浪微博需要验证应用签名,请一定要在新浪开放平台管理中心应用信息 -> 基本信息 -> Android签名包名信息 配置该信息
每次包名变化或者使用的.keystore变化都会导致应用签名变化,请重新到新浪微博开放平台设置。
运行Demo时如果重新编译,因为使用的.keystore文件变化也会导致应用签名变化,导致Demo新浪微博分享无法正常工作,请运行Demo时使用Demo工程包中提供的debug.keystore替换C:\Users\Administrator\.android中的debug.keystore文件
微信和朋友圈:
微信和朋友圈也需要验证应用签名,请在微信开放平台管理中心修改应用 -> 开发信息配置。
QQ和QQ空间:
QQ和QQ空间使用的是腾讯开放平台api,请在腾讯开放平台申请账号和注册应用,请不要使用QQ互联(用于网站账号登录)的配置,虽然都是腾讯的,但是两个平台并不通用,除了需要在youtui_sdk.xml配置信息,还需要在manifest文件中的android:scheme中的tencent后的一串数字换成自己应用的appid。
2.在AndroidManifest.xml 注册权限 3.在AndroidManifest.xml 注册权限4. 在 AndroidManifest.xml 注册需要的Activity
5.信和朋友圈回调设置
如果需要分享微信和朋友圈,必需建一个 应用包名+ .wxapi 的包,在该包下建 WXEntryActivity.Java,将该类继承cn.bidaround.ytcore.wxapi.WXEntryActivity即可(里面不用写代码)
public class WXEntryActivity extends cn.bidaround.ytcore.wxapi.WXEntryActivity {}
如图:(将com.xingxinglangtuoche替换成你应用的package名,微信回调会使用到)
6.初始化友推
开发者请在自己的程序开始,最好是在MainActivity的onCreate方法调用YtTemplate.init(this)初始化友推sdk,这样友推sdk才能进行后续调用(否则分享等操作会出现空指针异常),例如:
应用退出时:
在您项目的出口Activity的 onDestroy 方法的第一行插入下面的代码 YtTemplate.release(this); 此方法用于释放内存,统计用户使用情况,一旦调用了release,就必须重新调用init才能使用友推的功能,否则会出现空指针异常;
4.6创建 ShareData 实例,调用该实例的set方法设置需要分享的数据:
创建ShareData实例,调用该实例的set方法设置自己需要分享的数据,关于该实例具体内容见下文,如果只是分享应用则只需要设置setIsAppShare(true) 就可以分享应用在友推后台填写的信息和下载链接。
ShareData 包含的字段:
- isAppShare
- shareType
- text
- imagePath
- imageUrl
- description
- title
- target_url
- videoUrl
- musicUrl
- image
- 判断是否为分享应用
- 分享格式,支持图文链接、视频、音乐、图片
- 待分享的文字,短信要小于70个字符,微博要小于140个字符,如果需要分享链接,最好将链接url放在最后
- 待分享的本地图片地址,分享图片的话需要在本地和网络图片中选一,如果都有则优先分享本地图片
- 待分享网络图片url,分享图片的话需要在本地和网络图片中选一,如果都有则优先分享本地图片
- 待分享内容的描述
- 待分享内容的标题
- 待分享内容的跳转链接
- 待分享视频的地址
- 待分享音乐的地址
- 待分享图片
1. 通过创建该类实例,调用实例的set方法设置这些参数,例如:
上面的设置为分享图文链接,如果只分享图片、视频或音乐,请设置:
shareData.setShareType(ShareData.SHARETYPE_IMAGE);//设置分享图片
shareData.setShareType(ShareData.SHARETYPE_VIDEO);//设置分享视频(仅微信,朋友圈,新浪微博支持)
shareData.setShareType(ShareData.SHARETYPE_MUSIC);//设置分享音乐(仅微信,朋友圈,新浪微博支持)
2. 设置分享内容
//为各平台设置统一的默认分享数据blackTemp.setShareData(shareData);//**如果要为某个平台设置不一样的分享信息(如需要在微信分享视频,而QQ不支持分享视频,则需要单独为QQ设置图文链接分享,否则点分享到QQ时会没反应)则单独设置*///blackTemp.addData(YtPlatform.PLATFORM_QQ, shareData);
4.8调用友推分享推荐组件
为应用添加一个分享推荐按钮,如:
图:分享推荐按钮放置位置示例
在分享按钮事件中调用youtui的组件即可,示例代码:
public void onClick(View v) { if(v.getId()==R.id.popup_bt){ /*调用友推分享推荐组件,YouTuiViewType类的常量为分享样式参数,目前支持白色列表和黑色网格两种*/ /*创建分享的模板,第一个参数为activity,第二个参数为分享窗口样式,第三个参数为是否需要积分*/ YtTemplate blackTemp = new YtTemplate(this, YouTuiViewType.WHITE_GRID,false); //白色网格样式不需要积分活动 /*YtTemplate blackTemp = new YtTemplate(this, YouTuiViewType.WHITE_LIST,ture);*/ //白色列表样式需要积分活动 ShareData shareData = new ShareData(); shareData.isAppShare = false;//设置为true则分享的信息从友推后台填写的应用信息中读取,可动态更新后面的值不用设置。 shareData.setDescription("友推积分组件"); shareData.setTitle("友推分享"); shareData.setText("通过友推积分组件,开发者几行代码就可以为应用添加分享送积分功能,并提供详尽的后台统计数据,除了本身具备的分享功能外,开发者也可将积分功能单独集成在已有分享组件的app上,快来试试吧 http://youtui.mobi"); shareData.setTarget_url("http://youtui.mobi"); shareData.setImageUrl("http://youtui.mobi/media/image/youtui.png"); blackTemp.setShareData(shareData);//设置默认的分享数据;shareData 设置参看4.6 //**如果要为某个平台设置不一样的分享信息。则单独设置*/ //blackTemp.addData(YtPlatform.PLATFORM_QQ, shareData); //调出分享窗口 blackTemp.show(); //如果需要自定义分享事件,可以创建监听事件,然后在回调中处理 YtShareListener listener1 = new YtShareListener() { @Override public void onSuccess(ErrorInfo arg0) { } @Override public void onPreShare() { } @Override public void onError(ErrorInfo arg0) { } @Override public void onCancel() { } }; //给新浪微博添加分享监听 blackTemp.addListener(YtPlatform.PLATFORM_SINAWEIBO, listener1); //给QQ添加分享监听 //blackTemp.addListener(YtPlatform.PLATFORM_QQ, listener2); } }
直接调用截屏分享的方法:
ytTemplate.showScreenCap();//不用设置shareData
这样就成功集成了友推的分享推荐功能了,用户点击推荐分享按钮后,界面如下:
应用可以在后台设置分享送积分、积分兑换礼品活动,激励用户跟主动向好友分享您的应用,以及查看用户分享推荐的数据明细。
如果没有设置分享送积分活动则不会提示分享送积分活动信息,返回到基本的分享组件功能。
案例:兼职猫集成后,用户通过QQ分享给好友,点击链接进入应用简介下载页面
应用可以在后台设置推广活动及查看用户分享的明细报表。
图:推广活动管理页面
图:后台积分分享数据统计报表页面
4.9常见集成错误
1) v4包版本冲突,解决方法在lib工程和应用工程使用同一个版本的v4包
2) 社交平台jar包冲突,如果开发者前面引入过分享平台的开发包,并且和友推sdk使用的开发包冲突,请删除原先导入的包
3) youtui_sdk.xml填写错误,导致解析异常,无法读取开发者注册信息,请务必正确填写
4) 新浪微博分享时显示出错了或sso package or sign error,请检查在新浪申请的应用Android签名设置是否正确,当使用的keystore变化时,注意到新浪开发平台修改应用签名
4.10避免代码混淆造成错误
//微信: -keep class com.tencent.mm.sdk.openapi.WXMediaMessage { *;} -keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;} -keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage { *;} -keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;} //qq和qq空间: -keep class com.tencent.open.TDialog$* -keep class com.tencent.open.TDialog$* {*;} -keep class com.tencent.open.PKDialog -keep class com.tencent.open.PKDialog {*;} -keep class com.tencent.open.PKDialog$* -keep class com.tencent.open.PKDialog$* {*;}
5.第三方登录
5.1初始化友推
开发者请在自己的程序开始,最好是在MainActivity的onCreate方法调用YtTemplate.init(this)初始化友推sdk,这样友推sdk才能进行后续调用:
如果此前调用友推分享组件已初始化则不用重复。
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); YtTemplate.init(this);/*初始化友推*/ initView(); }
5.2注册Activity
<!-- 调用友推第三方登录需要注册该activity --> <activity android:name="cn.bidaround.ytcore.login.AuthActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
5.3创建授权类实例
创建一个AuthLogin实例,并创建监听器listener,授权完成后的页面跳转等操作请放在这里,例如:
AuthLogin auth = new AuthLogin(); AuthListener listener = new AuthListener() { @Override public void onAuthSucess(Activity act, AuthUserInfo userInfo) { Log.i("sinaGender:", userInfo.getSinaGender()); Log.i("sinaName:", userInfo.getSinaName()); //获取新浪用户头像url Log.i("sinaProfileImageUrl:", userInfo.getSinaProfileImageUrl()); //获取新浪用户昵称 Log.i("sinaScreenname:", userInfo.getSinaScreenname()); Log.i("sinaUid:", userInfo.getSinaUid()); // 模拟授权成功后跳转到用户界面 Intent sinaIt = new Intent(MainActivity.this, UserActivity.class); sinaIt.putExtra("from", "sina"); sinaIt.putExtra("sinaGender", "sinaGender:" + userInfo.getSinaGender()); sinaIt.putExtra("sinaName", "sinaName:" + userInfo.getSinaName()); sinaIt.putExtra("sinaProfileImageUrl", userInfo.getSinaProfileImageUrl()); sinaIt.putExtra("sinaScreenname", "sinaScreenname:" + userInfo.getSinaScreenname()); sinaIt.putExtra("sinaUid", "sinaUid:" + userInfo.getSinaUid()); act.startActivityForResult(sinaIt, 0); } @Override public void onAuthFail(Activity act) { } @Override public void onAuthCancel(Activity act) { } }; auth.sinaAuth(this, listener);//调用新浪微博授权登录 //auth.qqAuth(this, qqListener);//调用QQ授权登录
5.4调用授权类的授权方法
例如:auth.sinaAuth(this, listener);//使用新浪微博授权登录
平台 | 方法 |
---|---|
新浪微博授权登录 | auth.sinaAuth(this, listener); |
qq授权登录 | auth.qqAuth(this, qqListener); |
腾讯微博授权登录 | auth.tencentWbAuth(this, tencentWbListener); |
其中参数1为当前Activity,参数2为授权监听,需要实现AuthListener接口,该接口中act为授权Activity,userInfo对象中携带授权后获得的用户信息,使用get方法可以获取:
5.5进行授权后的操作
请将授权后的操作写在AuthListener对象的方法中,onAuthSucess方法处理授权成功操作,onAuthFail处理授权失败,onAuthCancel处理授权取消(见上)
5.6获取授权用户信息
在AuthListener的onAuthSucess方法第二个参数userInfo中携带有授权用户信息,使用get获取
名称 | 方法 |
---|---|
新浪用户性别 | userInfo.getSinaGender() |
新浪用户姓名 | userInfo.getSinaName() |
新浪用户头像url | userInfo.getSinaProfileImageUrl() |
新浪用户昵称 | userInfo.getSinaScreenname() |
新浪用户id | userInfo.getSinaUid() |
qq用户性别 | userInfo.getQqGender() |
qq用户头像url | userInfo.getQqImageUrl() |
qq用户昵称 | userInfo.getQqNickName() |
qq用户openid | userInfo.getQqOpenid() |
腾讯微博用户姓名 | userInfo.getTencentWbName() |
腾讯微博用户昵称 | userInfo.getTencentWbNick() |
腾讯微博用户openid | userInfo.getTencentWbOpenid() |
腾讯微博用户头像url(注意这不是一个完整的url,请在后面添加/尺 寸得到完整url,比如加上/40得到尺寸为40的头像url) | userInfo.getTencentWbHead() |
腾讯微博用户性别 | userInfo.getTencentWbGender() |