大家好,欢迎来到IT知识分享网。
友盟分享官方已经提供很详细的说明文档,这里主要结合官方文档,更加仔细的讲述一下友盟分享的具体过程以及一些坑。
1. 去友盟官网添加应用,获取新应用的appKey,并根据要分享的平台下载对应的友盟sdk。
2.使用友盟SDK,添加资源文件和jar包。
这里友盟提供了三种方法:
方法A 快速集成工具:使用SDKIntegration.jar 软件自动向我们的项目工程添加资源文件和jar包。
方法B 直接添加工程引用:直接将下载下来的social_sdk_library_project文件夹导入Eclipse,并在您的工程中添加对此项目的引用即可。
方法C 手动添加:添加资源到现有项目中,下面的每一步都需要再去添加jar和res资源,比较费事。
我采用的方法B,升级和使用方便,可随意更换要分享的平台。并且下面的步骤都是基于方法B的。
3. Manifest配置,添加友盟Appkey/Activity/权限
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.umeng.example" android:versionCode="1" android:versionName="1.0" > <application android:debuggable="true" android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.Black.NoTitleBar" > <!-- 注册SDK使用的Activity# --> <!--分享编辑页--> <activity android:name="com.umeng.socialize.view.ShareActivity" android:configChanges="orientation|keyboard" android:launchMode="singleTask" android:noHistory="true" android:theme="@style/Theme.UMDialog" android:windowSoftInputMode="stateVisible|adjustResize" > </activity> <!-- 空间和 SSO授权的Activity注册 --> <activity android:name="com.tencent.tauth.AuthActivity" 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" /> <!-- ,如果你使用的公用账号,则不需要修改;否则修改成你在开放平台申请的 APP ID--> <data android:scheme="tencent" /> </intent-filter> </activity> <activity android:name="com.tencent.connect.common.AssistActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:screenOrientation="portrait"> </activity> <!-- 添加UmengAppkey# --> <meta-data android:name="UMENG_APPKEY" android:value="xxxxxxxxxxxxxxxxxxxxxx" > </meta-data> </application> <uses-sdk android:minSdkVersion="8" /> <!-- 声明SDK使用的相关权限# --> <!-- 检测网络状态 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 获取mac地址作为用户的备用唯一标识 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 获取用户手机的IMEI,用来唯一的标识用户 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 缓存资源优先存入SDcard --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 允许应用程序联网,以便向我们的服务器端发送数据 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 、空间所需权限 --> <uses-permission android:name="android.permission.GET_TASKS" /> </manifest>
如果选用多种UmengSDK产品使用不同Appkey,可为SocialSDK配置单独的appkey,如下:
/*代码添加Appkey,如果设置了非null值,SocialSDK将使用该值.*/ SocializeConstants.APPKEY = "xxxxxxxxx";
4. 初始化友盟sdk,弹出分享面板
初始化友盟
// 首先在您的Activity中添加如下成员变量 final UMSocialService mController = UMServiceFactory.getUMSocialService("com.umeng.share"); // 设置分享内容 mController.setShareContent("友盟社会化组件(SDK)让移动应用快速整合社交分享功能,http://www.umeng.com/social"); // 设置分享图片, 参数2为图片的url地址 mController.setShareMedia(new UMImage(getActivity(), "http://www.umeng.com/images/pic/banner_module_social.png")); // 设置分享图片,参数2为本地图片的资源引用 //mController.setShareMedia(new UMImage(getActivity(), R.drawable.icon)); // 设置分享图片,参数2为本地图片的路径(绝对路径) //mController.setShareMedia(new UMImage(getActivity(), // BitmapFactory.decodeFile("/mnt/sdcard/icon.png"))); // 设置分享音乐 //UMusic uMusic = new UMusic("http://sns.whalecloud.com/test_music.mp3"); //uMusic.setAuthor("GuGu"); //uMusic.setTitle("天籁之音"); // 设置音乐缩略图 //uMusic.setThumb("http://www.umeng.com/images/pic/banner_module_social.png"); //mController.setShareMedia(uMusic); // 设置分享视频 //UMVideo umVideo = new UMVideo( // "http://v.youku.com/v_show/id_XNTE5ODAwMDM2.html?f=19001023"); // 设置视频缩略图 //umVideo.setThumb("http://www.umeng.com/images/pic/banner_module_social.png"); //umVideo.setTitle("友盟社会化分享!"); //mController.setShareMedia(umVideo);
弹出分享面板
yourShareButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 是否只有已登录用户才能打开分享选择页 mController.openShare(getActivity(), false); } });
到这里,友盟分享算是阶段性完成,但是上面仅仅能分享到豆瓣新浪微博什么的,并且不能免登录。
5. 各平台SSO(免登录)配置
5.1 免登录回调:
如果有使用任一平台的SSO授权或者集成了facebook平台, 则必须在对应的activity中实现onActivityResult方法, 并添加如下代码
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); /使用SSO授权必须添加如下代码 */ UMSsoHandler ssoHandler = mController.getConfig().getSsoHandler(requestCode) ; if(ssoHandler != null){ ssoHandler.authorizeCallBack(requestCode, resultCode, data); } }
5.2 分享到微信和朋友圈:
5.2.1 去微信开放平台创建移动应用,填写app基本资料,然后等待审核,审核通过后会有appId和AppSecret。
5.2.2 添加集成代码
String appID = "wx967daebe835fbeac"; String appSecret = "5fa9e68ca3970e87a1f83e563c8dcbce"; // 添加微信平台 UMWXHandler wxHandler = new UMWXHandler(getActivity(),appId,appSecret); wxHandler.addToSocialSDK(); // 添加微信朋友圈 UMWXHandler wxCircleHandler = new UMWXHandler(getActivity(),appId,appSecret); wxCircleHandler.setToCircle(true); wxCircleHandler.addToSocialSDK();
5.2.3 单独为微信微信添加回调
步骤一 在manifest中注册回调activity
<activity android:name=".wxapi.WXEntryActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" />
步骤二 添加对用的WXEntryActivity代码
将SDK包中platforms/weixin目录下的wxapi文件夹拷贝到您的工程的包目录下, 然后修改WXEntryActivity的完整路径即可。
例如social_sdk_example的包名为com.umeng.soexample,因此将wxapi文件夹拷贝到com.umeng.soexample下,最终WXEntryActivity的 完整路径为com.umeng.soexample.wxapi.WXEntryActivity。
注意:
拷贝完后,会发现WXEntryActivity的类里什么代码也没有,即使这样也不要额外去添加代码。
也可随意拷贝其他位置,只要与manifest能对应即可。
注意事项
- 在微信开放平台填写你App的的签名,测试、发布时要保证App的签 名跟微信开放平台的签名一致。
- 工程的包名必须同申请应用的包名一致
- 开发者的应用需要通过审核。开发者在申请应用必须要通过微信官网 的审核才能进行调试
5.2.4 设置微信分享内容
注意事项请参考 5.3.4 分享内容设置
添加集成代码
//设置微信好友分享内容 WeiXinShareContent weixinContent = new WeiXinShareContent(); //设置分享文字 weixinContent.setShareContent("来自友盟社会化组件(SDK)让移动应用快速整合社交分享功能,微信"); //设置title weixinContent.setTitle("友盟社会化分享组件-微信"); //设置分享内容跳转URL weixinContent.setTargetUrl("你的URL链接"); //设置分享图片 weixinContent.setShareImage(localImage); mController.setShareMedia(weixinContent); //设置微信朋友圈分享内容 CircleShareContent circleMedia = new CircleShareContent(); circleMedia.setShareContent("来自友盟社会化组件(SDK)让移动应用快速整合社交分享功能,朋友圈"); //设置朋友圈title circleMedia.setTitle("友盟社会化分享组件-朋友圈"); circleMedia.setShareImage(localImage); circleMedia.setTargetUrl("你的URL链接"); mController.setShareMedia(circleMedia);
接口说明
- 微信分享必须设置targetURL,需要为http链接格式
- 微信朋友圈只能显示title,并且过长会被微信截取部分内容
5.3 分享到 和 空间
5.3.1 去腾讯开放平台注册应用
按照官方要求填写,获取APPID及appkey,并且将APPID及appkey绑定在友盟主站后台, 同时注意在应用审核通过前必须添加测试账号,否则会出现报错。
5.3.2 由于第3大步 manifest配置已经添加了com.tencent.tauth.AuthActivity和AssistActivity,所以此处不需要再配置manifest。
5.3.3 添加集成代码
添加在分享列表页中
//参数1为当前Activity, 参数2为开发者在互联申请的APP ID,参数3为开发者在互联申请的APP kEY. UMSsoHandler SsoHandler = new UMSsoHandler(getActivity(), "", "caa74ab60104f0ba"); SsoHandler.addToSocialSDK();
添加Qzone在分享列表页中
//参数1为当前Activity, 参数2为开发者在互联申请的APP ID,参数3为开发者在互联申请的APP kEY. QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(getActivity(), "", "caa74ab60104f0ba"); qZoneSsoHandler.addToSocialSDK();
5.3.4 设置分享内容
注意
上面的分享,已经集成到分享列表中去了,也可以分享成功,但是点击分享的内容打开的确是友盟官网。
这是因为腾讯的 QZone 和 微信 还需要单独设置分享内容。上面初始化友盟sdk的代码,mController.setShareContent的步骤,对腾讯家族有限制。只对新浪和人人等其他第三方有效。
一旦调用单独对平台的设置 比如ShareContent,则上面 mController.setShareContent等的设置会失效,比如mController已经设置了分享图片,但是ShareContent没有设置分享图片,则实际效果会是分享的内容也没有图片。(有点坑)
String shareContent = "友盟社会化组件(SDK)让移动应用快速整合社交分享功能,http://www.umeng.com/social"; String shareTargetUrl = "http://www.umeng.com/social"; UMImage shareImage = new UMImage(mContext, R.drawable.icon); String AppId = ""; String AppKey = "mx1qogjc6jrawa33"; //分享和空间分享还需要设置ShareContent和QZoneShareContent,否则点击分享内容会跳到友盟官网。 // content ShareContent ShareContent = new ShareContent(); ShareContent.setShareContent(shareContent); ShareContent.setTitle("hello, title"); //不加的话,title默认为“分享到” ShareContent.setShareImage(shareImage); ShareContent.setTargetUrl(shareTargetUrl); mController.setShareMedia(ShareContent); // QZone content // FIXME:一旦调用mController.setShareMedia(qzone)方法,则mController之前的设置在qzone中都不会生效,必须在QZoneShareContent重新设置。也一样。 QZoneShareContent qzone = new QZoneShareContent(); qzone.setShareContent("简易短信转发App,两个手机一个搞定!http://fir.im/smsTransmit"); qzone.setTargetUrl(shareTargetUrl); qzone.setTitle("QZone title"); //qzone.setShareImage(urlImage); //尽管mController设置图片,若此处不设置图片,则分享时没有图片 mController.setShareMedia(qzone);
5.4 分享到新浪微博
5.4.1 去新浪微博开放平台注册应用,在应用信息–基本信息页中将安全域名填写为sns.whalecloud.com ,并且还需要在友盟的官网的组件–社会化分享–自定义设置–新浪 绑定app的相关属性。
5.4.2 添加SSO集成代码
//设置新浪SSO handler mController.getConfig().setSsoHandler(new SinaSsoHandler());
5.4.3 添加SSO回调
与其他平台一致,都采用5.1 免登录回调的方式。
5.4.4 设置分享内容
内容设置与sdk初始化方法一样
// 设置分享内容 mController.setShareContent("友盟社会化组件(SDK)让移动应用快速整合社交分享功能,http://www.umeng.com/social"); // 设置分享图片,参数2为本地图片的资源引用 mController.setShareMedia(new UMImage(getActivity(), R.drawable.icon));
注意
- 新浪微博、腾讯微博及豆瓣的跳转链接只能设置在分享文字之中,以http形式传递即可,人人网可以通过setAppWebSite方法单独设置跳转链接
- 也可以像腾讯那样,通过SinaShareContent单独设置分享内容
其他分平台设置内容形式有
平台 | 内容类型 |
---|---|
新浪微博 | SinaShareContent |
腾讯微博 | TencentWbShareContent |
人人网 | RenrenShareContent |
豆瓣 | DoubanShareContent |
TwitterShareContent | |
G+ | GooglePlusShareContent |
6. 下面是我初始化友盟的Demo
String shareContent = "友盟社会化组件(SDK)让移动应用快速整合社交分享功能,http://www.umeng.com/social"; String shareTargetUrl = "http://www.umeng.com/social"; UMImage shareImage = new UMImage(mContext, R.drawable.icon); // 设置分享内容 mController.setShareContent(shareContent); // 设置分享图片,参数2为本地图片的资源引用 mController.setShareMedia(shareImage); // 微信和朋友圈 String wxAppID = "wx967daebe835fbeac"; String wxAppSecret = "a88ve68ca3970e1da1f83e563c8d78fg"; // 添加微信平台 UMWXHandler wxHandler = new UMWXHandler(mContext,wxAppID,wxAppSecret); wxHandler.addToSocialSDK(); // 添加微信朋友圈 UMWXHandler wxCircleHandler = new UMWXHandler(mContext,wxAppID,wxAppSecret); wxCircleHandler.setToCircle(true); wxCircleHandler.addToSocialSDK(); String AppId = ""; String AppKey = "mx1qogjc6jraw7pn"; //分享和空间分享还需要设置ShareContent和QZoneShareContent,否则点击分享内容会跳到友盟官网。 // content ShareContent ShareContent = new ShareContent(); ShareContent.setShareContent(shareContent); ShareContent.setTitle("hello, title"); //不加的话,title默认为“分享到” ShareContent.setShareImage(shareImage); ShareContent.setTargetUrl(shareTargetUrl); mController.setShareMedia(ShareContent); // QZone content FIXME:一旦调用mController.setShareMedia(qzone)方法, //则mController之前的设置在qzone中都不会生效,必须在QZoneShareContent重新设置。也一样。 QZoneShareContent qzone = new QZoneShareContent(); qzone.setShareContent("简易短信转发App,两个手机一个搞定!http://fir.im/smsTransmit"); qzone.setTargetUrl(shareTargetUrl); qzone.setTitle("QZone title"); //qzone.setShareImage(urlImage); //尽管mController设置图片,若此处不设置图片,则分享时没有图片 mController.setShareMedia(qzone); // 分享 SSO UMSsoHandler SsoHandler = new UMSsoHandler(this, AppId, AppKey); SsoHandler.addToSocialSDK(); // 空间 SSO //参数1为当前Activity,参数2为开发者在互联申请的APP ID,参数3为开发者在互联申请的APP kEY. QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(this, AppId, AppKey); qZoneSsoHandler.addToSocialSDK(); // SINA //设置新浪SSO handler mController.getConfig().setSsoHandler(new SinaSsoHandler());
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/131326.html