友推实现第三方登录、分享以及获取用户资料,截屏分享

来源:互联网 发布:perl @数组 shift 编辑:程序博客网 时间:2024/04/27 16:59
一、实现的效果图                                                                                                                                                                                                                                                                                                                                                                                                                                                      二、项目结构目录(youtui-lib文件下)                                                                          
三、编码前的准备工作
1.申请应用 AppKey
   注意:需要申请友推appkey和你需要登录分享平台的appkey
 
          (1)友推appkey申请
        在首页http://youtui.mobi/的下方点击添加我的应用即可一步步完成申请                                   
        (2)申请社交平台appkey

       集成前您需要为您的应用在需要集成的社交网站开放平台申请账号(一般一个工作日可完成审核),否则只能调用系统的分享菜单,无法跟踪分享的回调事件及统计。

       QQ、QQ空间的可以使用友推提供的appkey,新浪微博、腾讯微博的也可以使用友推提供的appkey(但无法使用SSO免登,消息来源显示友推),微信、人人网的须要自己应用申请

[td]
平台
网址
微信
http://open.weixin.qq.com
新浪微博
http://open.weibo.com
腾讯微博
http://dev.t.qq.com
QQ空间、QQ
http://open.qq.com/
微信好友
http://open.weixin.qq.com
人人
http://dev.renren.com

2、获取Libs    
请点击下载:  youtui-lib.rar (1.55 MB, 下载次数: 0) 
 

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 注册权限
  1. <!-- 检测网络状态 -->
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

  3. <!-- 获取mac地址作为用户的备用唯一标识 -->
  4. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

  5. <!-- 获取用户手机的IMEI,用来唯一的标识用户。 -->
  6. <uses-permission android:name="android.permission.READ_PHONE_STATE" />

  7. <!-- 写入SDcard权限 -->
  8. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  9. <!--打开关闭sd卡权限--!>
  10. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

  11. <!--网络权限--!>
  12. <uses-permission android:name="android.permission.INTERNET" />

  13. <!-- 用于读取sd卡图片 -->
  14. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

  15. <!-- 用于人人SSO登陆 -->
  16. <uses-permission android:name="android.permission.GET_ACCOUNTS" />

  17. <!-- 用于人人SSO登陆 -->
  18. <uses-permission android:name="android.permission.USE_CREDENTIALS" />

  19. <!-- 用于人人SSO登陆 -->
  20. <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
复制代码
3.在AndroidManifest.xml 注册权限
  1. <!-- 检测网络状态 -->
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

  3. <!-- 获取mac地址作为用户的备用唯一标识 -->
  4. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

  5. <!-- 获取用户手机的IMEI,用来唯一的标识用户。 -->
  6. <uses-permission android:name="android.permission.READ_PHONE_STATE" />

  7. <!-- 写入SDcard权限 -->
  8. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  9. <!--打开关闭sd卡权限--!>
  10. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

  11. <!--网络权限--!>
  12. <uses-permission android:name="android.permission.INTERNET" />

  13. <!-- 用于读取sd卡图片 -->
  14. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

  15. <!-- 用于人人SSO登陆 -->
  16. <uses-permission android:name="android.permission.GET_ACCOUNTS" />

  17. <!-- 用于人人SSO登陆 -->
  18. <uses-permission android:name="android.permission.USE_CREDENTIALS" />

  19. <!-- 用于人人SSO登陆 -->
  20. <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
复制代码


4. AndroidManifest.xml 注册需要的Activity
  1. <!-- 微信分享需要注册该activity -->
  2. <activity
  3. android:name=".wxapi.WXEntryActivity"
  4. android:exported="true"
  5. android:launchMode="singleTask"
  6. android:theme="@android:style/Theme.Translucent" >
  7. </activity>

  8. <!-- qq回调需要注册该activity -->
  9. <activity
  10. android:name="com.tencent.connect.common.AssistActivity"
  11. android:configChanges="orientation|keyboardHidden"
  12. android:screenOrientation="portrait"
  13. android:theme="@android:style/Theme.Translucent.NoTitleBar" />

  14. <!-- qq授权需要注册该activity -->
  15. <activity
  16. android:name="com.tencent.tauth.AuthActivity"
  17. android:launchMode="singleTask"
  18. android:noHistory="true" >
  19. <intent-filter>
  20. <action android:name="android.intent.action.VIEW" />
  21. <category android:name="android.intent.category.DEFAULT" />
  22. <category android:name="android.intent.category.BROWSABLE" />

  23. <!-- 请将1101255276换成开发者自己应用的腾讯开放平台 Appid-->
  24. <data android:scheme="tencent1101255276" />
  25. </intent-filter>
  26. </activity>

  27. <!-- 人人授权需要注册的activity -->
  28. <activity
  29. android:name="com.renn.rennsdk.oauth.OAuthActivity"
  30. android:configChanges="orientation|navigation|keyboardHidden" />


  31. <!-- 分享界面 -->
  32. <activity
  33. android:name="cn.bidaround.ytcore.activity.ShareActivity"
  34. android:exported="true"
  35. android:launchMode="singleTop"
  36. android:theme="@android:style/Theme.Translucent.NoTitleBar" />
  37. <!-- 新浪微博分享回调需要设置 -->
  38. <intent-filter>
  39. <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
  40. <category android:name="android.intent.category.DEFAULT" />
  41. </intent-filter>
  42. </activity>

  43. <!-- 应用授权 activity-->
  44. <activity
  45. android:name="cn.bidaround.ytcore.login.AuthActivity"
  46. android:theme="@android:style/Theme.Translucent.NoTitleBar" />

  47. <!-- 友推积分activity -->
  48. <activity
  49. android:name="cn.bidaround.point.PointActivity" />

  50. <!-- 截屏编辑activity -->
  51. <activity
  52. android:name="cn.bidaround.youtui_template.ScreenCapEditActivity" 
  53. android:screenOrientation="portrait" 
  54. android:theme="@android:style/Theme.Black.NoTitleBar" />

  55. <!-- 友推渠道号,应用名(英文或拼音)+"_yt",如:“jd_yt”,用于识别通过友推下载的应用,请正确填写否则无法正确统计 -->
  56. <meta-data
  57. android:name="YOUTUI_CHANNEL"
  58. android:value="yourappname_yt" >
  59. </meta-data>
复制代码

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才能进行后续调用(否则分享等操作会出现空指针异常),例如:

  1. protected void onCreate(Bundle savedInstanceState) {
  2.     super.onCreate(savedInstanceState);
  3.     setContentView(R.layout.activity_main);
  4.     YtTemplate.init(this);/*初始化友推*/
  5.     initView();
  6. }
复制代码

应用退出时:

在您项目的出口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方法设置这些参数,例如:

  1. ShareData shareData = new ShareData();
  2. shareData.isAppShare = false;//设置为true则分享的信息从友推后台填写的应用信息中读取,可动态更新,后面的值不用设置。
  3. shareData.setDescription("友推积分组件");
  4. shareData.setTitle("友推分享");
  5. shareData.setText("通过友推积分组件,开发者几行代码就可以为应用添加分享送积分功能,并提供详尽的后台统计数据,除了本身具备的分享功能外,开发者也可将积分功能单独集成在已有分享组件的app上,快来试试吧 http://youtui.mobi");
  6. shareData.setTarget_url("http://youtui.mobi");
  7. shareData.setImageUrl("http://youtui.mobi/media/image/youtui.png");
复制代码

上面的设置为分享图文链接,如果只分享图片、视频或音乐,请设置:

shareData.setShareType(ShareData.SHARETYPE_IMAGE);//设置分享图片 
shareData.setShareType(ShareData.SHARETYPE_VIDEO);//设置分享视频(仅微信,朋友圈,新浪微博支持) 
shareData.setShareType(ShareData.SHARETYPE_MUSIC);//设置分享音乐(仅微信,朋友圈,新浪微博支持)

2. 设置分享内容

  1. //为各平台设置统一的默认分享数据
  2. blackTemp.setShareData(shareData);
  3. //**如果要为某个平台设置不一样的分享信息(如需要在微信分享视频,而QQ不支持分享视频,则需要单独为QQ设置图文链接分享,否则点分享到QQ时会没反应)则单独设置*/
  4. //blackTemp.addData(YtPlatform.PLATFORM_QQ, shareData);
复制代码

//为各平台设置统一的默认分享数据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() {@Overridepublic void onSuccess(ErrorInfo arg0) {}@Overridepublic void onPreShare() {}@Overridepublic void onError(ErrorInfo arg0) {}@Overridepublic 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() {@Overridepublic void onAuthSucess(Activity act, AuthUserInfo userInfo) {Log.i("sinaGender:", userInfo.getSinaGender());Log.i("sinaName:", userInfo.getSinaName());//获取新浪用户头像urlLog.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);}@Overridepublic void onAuthFail(Activity act) {}@Overridepublic 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()新浪用户头像urluserInfo.getSinaProfileImageUrl()新浪用户昵称userInfo.getSinaScreenname()新浪用户iduserInfo.getSinaUid()qq用户性别userInfo.getQqGender()qq用户头像urluserInfo.getQqImageUrl()qq用户昵称userInfo.getQqNickName()qq用户openiduserInfo.getQqOpenid()腾讯微博用户姓名userInfo.getTencentWbName()腾讯微博用户昵称userInfo.getTencentWbNick()腾讯微博用户openiduserInfo.getTencentWbOpenid()腾讯微博用户头像url(注意这不是一个完整的url,请在后面添加/尺
寸得到完整url,比如加上/40得到尺寸为40的头像url)userInfo.getTencentWbHead()腾讯微博用户性别userInfo.getTencentWbGender()



1 0
原创粉丝点击