友盟第三方分享 QQ QQ空间 微信 新浪 及走过的坑
2016-08-30 10:37
676 查看
这周刚上完新版本 新增了第三方登录和分享的功能,由于同事推荐就使用了友盟提供的分享和登录功能,处理时也碰到很多bug 现在抽个时间整理下。
友盟分享 在百度一下有很多博客也有详细的介绍,我这里就不搞这些重复的了。
友盟的登录在下一篇再分析,因为登录和分享毕竟不好放在同一个类去实现
我的个人建议 不要直接将SDK 直接按集成方法加入到项目里 这样很容易出很大的问题,先写一个自己所需要的功能的demo,然后封装好,再按配置集成到项目里,这样出错率会下降很多。虽然时间可能会有点多,但比一堆不知道什么问题的错误强。
大家需要可以先参考别人的处理方法,但一定要去官网看集成方法和APi 这样就可以少走点弯路,这里提供一个感觉很好的关于这块的博客地址 友盟分享
由于我现在是最新的SDK 所以可能和别人写的代码不一样 但是SDK 都是方法改了 里面用法还是差不太多的。
我的SDK版本 umeng_android_social_sdk_5.2.0_custom.zip
好现在先上demo代码
首先是MainActivity
这样回调还要实现下面这个方法
这里要分析一下 在按官方文档集成后会有res文件中layout中 会有这个umeng_socialize_shareboard_item.xml
它是与分享方法中open()相关的一个dirlog
如图 点击后会出现这样的布局
使用
如果需要对分享面板增加自定义的按钮,可以通过
但是如果你的需求不需要这样,那么我们查看API 会发现有另一个方法share(); 点击分享的图片直接去分享,没有dirlog选择,属于单个分享。
如果你的需求需要自定义分享的dirlog 那么去修改XML 文件的布局就可以。(由于我这边没有这样的需求所以没有就直接用友盟提供的XML)
接下来我们在BaseApplication.java 进行配置
这里要注意的是我们在第三方平台申请的微博和微信的需要包名的签名 用签名工具就可以 友盟有提供 微信申请apk 要至少一周时间审核。
好,接下来因为微信分享和微博分享需要两个回调类
微信的回调类 com.ffu365.android.wxapi.WXEntryActivity 你的注册第三方对应的包名 .wxapi.WXEntryActivity
微博的回调类 com.ffu365.android.WBShareActivity 你的注册第三方对应的包名 .WBShareActivity
微信 WXEntryActivity
新浪微博 友盟官网
我的微博回调类(效果是一样的,但是我加finish() 是因为在微博登录回调那里关掉回调授权页面的处理(授权成功回调页面不关闭),不影响,按情况来推荐先用官网的,不行再试试我的)
现在贴配置文件的代码 请根据你自己的项目去修改 跟这个官网集成步骤就不会出什么错
AndroidManifest.xml
另外 新浪微博分享回调页面配置问题
新浪微博分享,web页面显示:你所访问的站点在微博的认证失败,请稍后再试。如有疑问,请联系XX。(error:redirect_uri_mismatch) 。这种问题往往发生在新提交了移动应用但未审核的情况下。
解决方法:需要在微博开放平台的应用基本信息中配置安全域名:sns.whalecloud.com。同时在高级信息中配置OAuth2.0 授权设置:
授权回调页:
http://sns.whalecloud.com/sina2/callback
取消授权回调页:
http://sns.whalecloud.com/sina2/callback
然后就是libs 里面的配置 直接上图
这个有一个值得注意的问题
上面这写cpu配置so文件中是新浪微博需要的文件 一般选择一个就好
在我的项目里armeabi-v7a 这个不能放入项目里 程序直接崩或黑屏,查找原因是和百度地图产生了冲突。我当时也找不到解决办法就直接放弃加载这个so文件了 希望有遇到这样的问题有解决办法的朋友可以联系我(评论告诉也好)。
SDK里res 文件最好都导进去,然后在按需求修改
那么我们这个demo 算是结束了
那么我们顺便在这里把分享方法封装成一个工具类 ShareUtil
这个就详细说明 大家看代码就都知道了
这里说说一些坑爹的东西 (转一些前人的吐槽) 转载地址 http://blog.csdn.net/uxyheaven/article/details/40426465
产品看了默认的ui,手机上勉强能接受,可这个ui放到ipad上确实有些丑,这样就得写一套界面了,10分钟他妹啊.后来见到效果图的时候发现手机的下面多了一个取消按钮,产品觉得现在还是有小白用户不知道点空白区域可以取消.手机界面的效果图和平板界面的效果图还不一样,好吧,又多一套.
发给微信好友的时候,不能跳转到中间页.
解决方案:需求改成了纯文字的话就加个默认图片
又是微信,发视频的分享时,直接点击就播放了,不能跳转到中间页面.浪新微博则是有些视频只显示一个url,点击就下载了.
解决方案:需求改成了视频分享当图片分享,发一个视频预览图出去
微信和qq的需要每次都设置,浪新的竟然没这个设置.
解决方案:qq和微信在发出去的时候都单独设置跳转链接,浪新则是吧链接附加在文本后面,浪新微博还有个长度限制,过长的文本得剪短一些.
最后
你在demo运行得很正常,但是一添加到项目里就很多问题
你可以百度一下,或者去友盟官网的论坛看看那些帖子 希望会对你有帮助 (顺便吐槽论坛发了几个我碰到的问题没人鸟我,实在不行就打电话问客服吧 ) 论坛地址 http://bbs.umeng.com/forum.php?mod=forumdisplay&fid=37&filter=typeid&typeid=12
下一篇 我将对第三方登录处理和把分享中对应的dirlog 怎么去自定义一个更好的,因为官方提供是系统的太丑了
谢谢 ,我是一个新人。
友盟分享 在百度一下有很多博客也有详细的介绍,我这里就不搞这些重复的了。
友盟的登录在下一篇再分析,因为登录和分享毕竟不好放在同一个类去实现
我的个人建议 不要直接将SDK 直接按集成方法加入到项目里 这样很容易出很大的问题,先写一个自己所需要的功能的demo,然后封装好,再按配置集成到项目里,这样出错率会下降很多。虽然时间可能会有点多,但比一堆不知道什么问题的错误强。
大家需要可以先参考别人的处理方法,但一定要去官网看集成方法和APi 这样就可以少走点弯路,这里提供一个感觉很好的关于这块的博客地址 友盟分享
由于我现在是最新的SDK 所以可能和别人写的代码不一样 但是SDK 都是方法改了 里面用法还是差不太多的。
我的SDK版本 umeng_android_social_sdk_5.2.0_custom.zip
好现在先上demo代码
首先是MainActivity
package com.ffu365.android; import java.util.HashMap; import java.util 4000 .Map; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import com.ffu365.android.R; import com.umeng.socialize.Config; import com.umeng.socialize.ShareAction; import com.umeng.socialize.UMAuthListener; import com.umeng.socialize.UMShareAPI; import com.umeng.socialize.UMShareListener; import com.umeng.socialize.bean.SHARE_MEDIA; import com.umeng.socialize.media.UMImage; public class MainActivity extends Activity implements UMShareListener, OnClickListener { /* * umneg SDK 版本 5.2.0 * * */ private UMShareAPI mShareAPI; // private UMSocialService mController; private Context context = MainActivity.this; UMImage image = new UMImage(this, "http://image.7pa.com/data/57a55cb2c9078.png"); // 设置分享图片,参数2为本地图片的资源引用 // UMImage image = new UMImage(MainActivity.this, // BitmapFactory.decodeResource(getResources(), R.drawable.image)); // 设置分享图片,参数2为本地图片的路径(绝对路径) // UMImage image = new UMImage(MainActivity.this, // BitmapFactory.decodeFile("/mnt/sdcard/icon.png"))); // 设置分享音乐 包括缩略图 // UMusic music = new // UMusic("http://music.huoxing.com/upload/20130330/1364651263157_1085.mp3"); // music.setTitle("sdasdasd"); // music.setThumb(new // UMImage(ShareActivity.this,"http://www.umeng.com/images/pic/social/chart_1.png")); // 设置分享视频 // UMVideo video = new // UMVideo("http://video.sina.com.cn/p/sports/cba/v/2013-10-22/144463050817.html"); final SHARE_MEDIA[] displaylist = new SHARE_MEDIA[] { SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.SINA }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ProgressDialog dialog = new ProgressDialog(this); dialog.setTitle("授权中"); dialog.setMessage("正在加载···"); Config.dialog = dialog; com.umeng.socialize.utils.Log.LOG = true; XHLog.is_debug = true; mShareAPI = UMShareAPI.get(this); mShareBt = (Button) findViewById(R.id.share_bt); mShareBt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { new ShareAction(MainActivity.this).setDisplayList(displaylist) .withText("andriod端测试") // app内容 .withTitle("app分享第三方微信测试") .withTargetUrl("http://www.baidu.com")// 标题加 链接 .withMedia(image).setCallback(MainActivity.this)// .open(); } }); } /** * 分享的回调 */ @Override public void onCancel(SHARE_MEDIA arg0) { // TODO Auto-generated method stub Toast.makeText(this, "onCancel 取消", Toast.LENGTH_LONG).show(); } @Override public void onError(SHARE_MEDIA arg0, Throwable arg1) { // TODO Auto-generated method stub Toast.makeText(this, "onError 失败", Toast.LENGTH_LONG).show(); } @Override public void onResult(SHARE_MEDIA arg0) { // TODO Auto-generated method stub Toast.makeText(this, "onSucced 成功", Toast.LENGTH_LONG).show(); }
这样回调还要实现下面这个方法
onActivityResult() @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); UMShareAPI.get( this ).onActivityResult( requestCode, resultCode, data); }
这里要分析一下 在按官方文档集成后会有res文件中layout中 会有这个umeng_socialize_shareboard_item.xml
它是与分享方法中open()相关的一个dirlog
new ShareAction(MainActivity.this).setDisplayList(displaylist) .withText("andriod端测试") // app内容 .withTitle("app分享第三方微信测试") .withTargetUrl("http://www.baidu.com")// 标题加 链接 .withMedia(image).setCallback(MainActivity.this)// .open(); }
如图 点击后会出现这样的布局
分享面板点击回调
使用setShareboardclickCallback()可以进行分享面板不同按钮的点击回调,方便开发者进行特殊处理。
分享面板增加自定义按钮
如果需要对分享面板增加自定义的按钮,可以通过 ShareAction(this).addButton(String showword,String Keyword,String icon,String Grayicon,int index)进行设置其中第一个参数是显示的名字,第二个参数是平台名称, 注意这两个参数需要先声明 ,第三个参数是按钮图标的图片名字,第四个按钮是置灰情况下按钮图标的图片名字, 注意图片直接写路径即可,不要.png等后缀 最后一个变量是数标(功能保留)。 对于自定义平台的监听需要使用上面提到的分享面板点击回调,如下:
private ShareBoardlistener shareBoardlistener = new ShareBoardlistener() { @Override public void onclick(SnsPlatform snsPlatform,SHARE_MEDIA share_media) { if (share_media==null){ if (snsPlatform.mKeyword.equals("11")){ Toast.makeText(ShareActivity.this,"add button success",Toast.LENGTH_LONG).show(); } } else { new ShareAction(ShareActivity.this).setPlatform(share_media).setCallback(umShareListener) .withText("多平台分享") .share(); } } };
但是如果你的需求不需要这样,那么我们查看API 会发现有另一个方法share(); 点击分享的图片直接去分享,没有dirlog选择,属于单个分享。
new ShareAction(MainActivity.this).setDisplayList(displaylist) .withText("andriod端测试") // app内容 .withTitle("app分享第三方微信测试") .withTargetUrl("http://www.baidu.com")// 标题加 链接 .withMedia(image).setCallback(MainActivity.this).share(); }
如果你的需求需要自定义分享的dirlog 那么去修改XML 文件的布局就可以。(由于我这边没有这样的需求所以没有就直接用友盟提供的XML)
接下来我们在BaseApplication.java 进行配置
package com.ffu365.android; import android.app.Application; import com.umeng.socialize.PlatformConfig; public class BaseApplication extends Application { @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); // //测试 //你在对应第三方平台申请的appkey 密钥等 PlatformConfig.setQQZone("1105511711", "SozQd64v1Y51Ct6r"); PlatformConfig.setSinaWeibo("319062931", "a7b4f95381abbf747bxxx6910c963ae8"); PlatformConfig.setWeixin("wx9509a9xxxac2336a", "60022407xxxx5719a504ca737fdb4db2"); } }
这里要注意的是我们在第三方平台申请的微博和微信的需要包名的签名 用签名工具就可以 友盟有提供 微信申请apk 要至少一周时间审核。
好,接下来因为微信分享和微博分享需要两个回调类
微信的回调类 com.ffu365.android.wxapi.WXEntryActivity 你的注册第三方对应的包名 .wxapi.WXEntryActivity
微博的回调类 com.ffu365.android.WBShareActivity 你的注册第三方对应的包名 .WBShareActivity
微信 WXEntryActivity
package com.ffu365.android.wxapi; import android.os.Bundle; import com.umeng.socialize.weixin.view.WXCallbackActivity; public class WXEntryActivity extends WXCallbackActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } }
新浪微博 友盟官网
package com.umeng.soexample; import com.umeng.socialize.media.WBShareCallBackActivity; /** * */ public class WBShareActivity extends WBShareCallBackActivity{
}
我的微博回调类(效果是一样的,但是我加finish() 是因为在微博登录回调那里关掉回调授权页面的处理(授权成功回调页面不关闭),不影响,按情况来推荐先用官网的,不行再试试我的)
package com.ffu365.android; import android.app.Activity; import android.os.Bundle; public class WBShareActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); finish(); } }
现在贴配置文件的代码 请根据你自己的项目去修改 跟这个官网集成步骤就不会出什么错
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ffu365.android" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_LOGS" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.SET_DEBUG_APP" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:name="com.ffu365.android.BaseApplication" android:theme="@android:style/Theme.Light.NoTitleBar" > <activity android:name="com.ffu365.android.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.umeng.socialize.editorpage.ShareActivity" android:excludeFromRecents="true" android:theme="@style/Theme.UMDefault" /> <!-- 这个是配置成我们自己在友盟上面申请的 5576840067e58eab92000363 --> <meta-data android:name="UMENG_APPKEY" android:value="579f0a4367e58e31d100143e" > </meta-data> <!-- 新浪微博 --> <activity android:name="com.ffu365.android.WBShareActivity" android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait" > <intent-filter> <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser" android:configChanges="keyboardHidden|orientation" android:windowSoftInputMode="adjustResize" android:exported="false" > </activity> <service android:name="com.sina.weibo.sdk.net.DownloadService" android:exported=" fe24 false"> </service> <!--微信 --> <activity android:name="com.umeng.soexample.wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <!-- QQ--> <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" /> <data android:scheme="tencent1105511711" /> </intent-filter> </activity> <activity android:name="com.tencent.connect.common.AssistActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <activity android:name="com.ffu365.android.wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> </application> </manifest>
另外 新浪微博分享回调页面配置问题
新浪微博分享,web页面显示:你所访问的站点在微博的认证失败,请稍后再试。如有疑问,请联系XX。(error:redirect_uri_mismatch) 。这种问题往往发生在新提交了移动应用但未审核的情况下。
解决方法:需要在微博开放平台的应用基本信息中配置安全域名:sns.whalecloud.com。同时在高级信息中配置OAuth2.0 授权设置:
授权回调页:
http://sns.whalecloud.com/sina2/callback
取消授权回调页:
http://sns.whalecloud.com/sina2/callback
然后就是libs 里面的配置 直接上图
这个有一个值得注意的问题
上面这写cpu配置so文件中是新浪微博需要的文件 一般选择一个就好
在我的项目里armeabi-v7a 这个不能放入项目里 程序直接崩或黑屏,查找原因是和百度地图产生了冲突。我当时也找不到解决办法就直接放弃加载这个so文件了 希望有遇到这样的问题有解决办法的朋友可以联系我(评论告诉也好)。
SDK里res 文件最好都导进去,然后在按需求修改
那么我们这个demo 算是结束了
那么我们顺便在这里把分享方法封装成一个工具类 ShareUtil
import android.app.Activity; import android.content.Context; import android.graphics.BitmapFactory; import android.widget.Toast; import com.qpbox.R; import com.qpp.http.XHLog; import com.umeng.socialize.ShareAction; import com.umeng.socialize.UMShareListener; import com.umeng.socialize.bean.SHARE_MEDIA; import com.umeng.socialize.media.UMImage; public class Shareutil { // 设置分享网络url "http://www.umeng.com/images/pic/social/integrated_3.png" // UMImage image = new UMImage(this, // "http://image.7pa.com/data/57a55cb2c9078.png"); // 设置分享图片,参数2为本地图片的资源引用 // UMImage image = new UMImage(MainActivity.this, // BitmapFactory.decodeResource(getResources(), R.drawable.image)); // 设置分享图片,参数2为本地图片的路径(绝对路径) // UMImage image = new UMImage(MainActivity.this, // BitmapFactory.decodeFile("/mnt/sdcard/icon.png"))); // 设置分享音乐 包括缩略图 // UMusic music = new // UMusic("http://music.huoxing.com/upload/20130330/1364651263157_1085.mp3"); // music.setTitle("sdasdasd"); // music.setThumb(new // UMImage(ShareActivity.this,"http://www.umeng.com/images/pic/social/chart_1.png")); // 设置分享视频 // UMVideo video = new // UMVideo("http://video.sina.com.cn/p/sports/cba/v/2013-10-22/144463050817.html"); static final SHARE_MEDIA[] displaylist = new SHARE_MEDIA[] { SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.QQ, SHARE_MEDIA.SINA }; /** * * 固定微信分享 * @param context * @param title * @param content * @param imageUrl */ public static void showShareWX(final Context context, String title, String content, String url,String imageUrl) { UMImage image = new UMImage(context,imageUrl); new ShareAction((Activity) context) .setDisplayList(SHARE_MEDIA.WEIXIN_CIRCLE) .setCallback(new UMShareListener() { @Override public void onResult(SHARE_MEDIA arg0) { Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show(); } @Override public void onError(SHARE_MEDIA arg0, Throwable arg1) { Toast.makeText(context, "分享失败", Toast.LENGTH_LONG).show(); } @Override public void onCancel(SHARE_MEDIA arg0) { Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show(); } }).withTitle(title) .withMedia(image) .withTargetUrl(url) .withText(content) .share(); } /** * * 固定微信朋友圈分享 * @param context * @param title * @param content * @param imageUrl */ public static void showShareWXF(final Context context, String title, String content, String url,String imageUrl) { UMImage image = new UMImage(context,imageUrl); new ShareAction((Activity) context) .setDisplayList(SHARE_MEDIA.WEIXIN) .setCallback(new UMShareListener() { @Override public void onResult(SHARE_MEDIA arg0) { Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show(); } @Override public void onError(SHARE_MEDIA arg0, Throwable arg1) { Toast.makeText(context, "分享失败", Toast.LENGTH_LONG).show(); } @Override public void onCancel(SHARE_MEDIA arg0) { Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show(); } }) .withTitle(title) .withMedia(image) .withTargetUrl(url) .withText(content) .share(); } /** * * 固定QQ分享 * * @param context * @param title * @param content * @param imageUrl */ public static void showShareQQ(final Context context, String title, String content, String url,String imageUrl) { UMImage image = new UMImage(context,imageUrl); new ShareAction((Activity) context) .setDisplayList(SHARE_MEDIA.QQ) .setCallback(new UMShareListener() { @Override public void onResult(SHARE_MEDIA arg0) { Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show(); } @Override public void onError(SHARE_MEDIA arg0, Throwable arg1) { Toast.makeText(context, "分享失败", Toast.LENGTH_LONG).show(); } @Override public void onCancel(SHARE_MEDIA arg0) { Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show(); } }).withTitle(title) .withMedia(image) .withTargetUrl(url) .withText(content) .share(); } /** * * 固定QQ空间分享 * * @param context * @param title * @param content * @param imageUrl */ public static void showShareQQZ(final Context context, String title, String content,String url, String imageUrl) { UMImage image = new UMImage(context,imageUrl); new ShareAction((Activity) context) .setDisplayList(SHARE_MEDIA.QZONE) .setCallback(new UMShareListener() { @Override public void onResult(SHARE_MEDIA arg0) { Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show(); } @Override public void onError(SHARE_MEDIA arg0, Throwable arg1) { Toast.makeText(context, "分享失败", Toast.LENGTH_LONG).show(); } @Override public void onCancel(SHARE_MEDIA arg0) { Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show(); } }).withTitle(title) .withMedia(image) .withTargetUrl(url) .withText(content) .share(); } /** * * 固定新浪微博分享 * * @param context * @param title * @param content * @param imageUrl */ public static void showShareSina(final Context context, String title, String content,String url, String imageUrl) { UMImage image = new UMImage(context,imageUrl); new ShareAction((Activity) context) .setDisplayList(SHARE_MEDIA.SINA) .setCallback(new UMShareListener() { @Override public void onResult(SHARE_MEDIA arg0) { Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show(); } @Override public void onError(SHARE_MEDIA arg0, Throwable arg1) { Toast.makeText(context, "分享失败", Toast.LENGTH_LONG).show(); } @Override public void onCancel(SHARE_MEDIA arg0) { Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show(); } }).withTitle(title) .withMedia(image) .withTargetUrl(url) .withText(content) .share(); } /** * Win 纯图片分享 * @param context * @param title * @param content * @param imageUrl */ public static void showShareImg(final Context context, String title, String content, String imageUrl) { UMImage image = new UMImage(context,imageUrl); new ShareAction((Activity) context) .setDisplayList(displaylist) .setCallback(new UMShareListener() { @Override public void onResult(SHARE_MEDIA arg0) { Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show(); } @Override public void onError(SHARE_MEDIA arg0, Throwable arg1) { Toast.makeText(context, "分享失败", Toast.LENGTH_LONG).show(); } @Override public void onCancel(SHARE_MEDIA arg0) { Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show(); } }).withTitle(title) .withMedia(image) .withText(content) .open(); } /** * 只分享内容 * @param context * @param content * @param url * @param imageUrl */ public static void showShareContents(final Context context, String content, String url, String imageUrl) { if("".equals(url)){ url="http://ads.7pa.com/kefu/7pa/"; } UMImage image = new UMImage(context,imageUrl); new ShareAction((Activity) context) .setDisplayList(displaylist) .setCallback(new UMShareListener() { @Override public void onResult(SHARE_MEDIA arg0) { Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show(); } @Override public void onError(SHARE_MEDIA arg0, Throwable arg1) { Toast.makeText(context, "分享失败", Toast.LENGTH_LONG).show(); } @Override public void onCancel(SHARE_MEDIA arg0) { Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show(); } }) .withMedia(image) .withTargetUrl(url) .withText(content) .open(); } /** * Win 总分享 * @param context * @param title * @param content * @param url * @param imageUrl */ public static void showShare(final Context context, String title, String content, String url, String imageUrl) { UMImage image = new UMImage(context,imageUrl); new ShareAction((Activity) context) .setDisplayList(displaylist) .setCallback(new UMShareListener() { @Override public void onResult(SHARE_MEDIA arg0) { Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show(); } @Override public void onError(SHARE_MEDIA arg0, Throwable arg1) { Toast.makeText(context, "分享失败", Toast.LENGTH_LONG).show(); } @Override public void onCancel(SHARE_MEDIA arg0) { Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show(); } }) .withTitle(title) .withText(content) .withMedia(image) .withTargetUrl(url) .open(); } /** * 分享盒子本地 * @param context * @param title * @param content * @param url * @param imageUrl */ public static void showShareLocal(final Context context, String title, String content, String url) { //UMImage image = new UMImage(context,src); UMImage image = new UMImage(context, BitmapFactory.decodeResource(context.getResources(), R.drawable.ico_qpp)); new ShareAction((Activity) context) .setDisplayList(displaylist) .setCallback(new UMShareListener() { @Override public void onResult(SHARE_MEDIA arg0) { Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show(); } @Override public void onError(SHARE_MEDIA arg0, Throwable arg1) { Toast.makeText(context, "分享失败", Toast.LENGTH_LONG).show(); } @Override public void onCancel(SHARE_MEDIA arg0) { Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show(); } }) .withTitle(title) .withText(content) .withMedia(image) .withTargetUrl(url) .open(); } }
这个就详细说明 大家看代码就都知道了
这里说说一些坑爹的东西 (转一些前人的吐槽) 转载地址 http://blog.csdn.net/uxyheaven/article/details/40426465
title属性的效果不一致
qq空间和微信不设置标题,标题就默认显示内容了.就是说内容重复显示了2次
微信朋友圈如果设置了标题,那么内容就不显示了
浪新微博没这个功能
ui不合适
产品看了默认的ui,手机上勉强能接受,可这个ui放到ipad上确实有些丑,这样就得写一套界面了,10分钟他妹啊.后来见到效果图的时候发现手机的下面多了一个取消按钮,产品觉得现在还是有小白用户不知道点空白区域可以取消.手机界面的效果图和平板界面的效果图还不一样,好吧,又多一套.
纯文字展示效果不一样
发给微信好友的时候,不能跳转到中间页.解决方案:需求改成了纯文字的话就加个默认图片
视频展示效果不一样
又是微信,发视频的分享时,直接点击就播放了,不能跳转到中间页面.浪新微博则是有些视频只显示一个url,点击就下载了.解决方案:需求改成了视频分享当图片分享,发一个视频预览图出去
跳转链接的设置不一样
微信和qq的需要每次都设置,浪新的竟然没这个设置.解决方案:qq和微信在发出去的时候都单独设置跳转链接,浪新则是吧链接附加在文本后面,浪新微博还有个长度限制,过长的文本得剪短一些.
最后
你在demo运行得很正常,但是一添加到项目里就很多问题
你可以百度一下,或者去友盟官网的论坛看看那些帖子 希望会对你有帮助 (顺便吐槽论坛发了几个我碰到的问题没人鸟我,实在不行就打电话问客服吧 ) 论坛地址 http://bbs.umeng.com/forum.php?mod=forumdisplay&fid=37&filter=typeid&typeid=12
下一篇 我将对第三方登录处理和把分享中对应的dirlog 怎么去自定义一个更好的,因为官方提供是系统的太丑了
谢谢 ,我是一个新人。
相关文章推荐
- Android 集成友盟分享(集成了微信,微信朋友圈,QQ,QQ空间,新浪,豆瓣,需要加,自己去官网导入包)
- 集成友盟第三方登录(qq、微信、微信朋友圈、新浪)、分享
- [置顶] Android使用友盟集成QQ、微信、微博等第三方分享
- QQ、新浪、微信使用友盟第三方登录需注意(5.0之前)
- Android使用友盟集成QQ、微信、微博等第三方分享与登录方法详解
- 第三方分享(新浪,微信,QQ)
- Android友盟集成QQ、微信、微博等第三方登录与分享
- Android集成友盟社会化分享组件 ---- 分享到新浪、微信、QQ空间、腾讯微博等平台
- iOS开发 ios9.0后友盟第三方分享, qq微信找不到设备
- 友盟社会化分享之判断是否安装了QQ、微信、新浪微博客户端
- Android:Umeng(友盟) 微信,QQ,新浪分享 (三)
- Android集成友盟社会化分享组件 ---- 分享到新浪、微信、QQ空间、腾讯微博等平台
- SharePanel – Android上简单的一键分享,可分享到微信QQ和新浪微博
- 关于使用友盟QQ微信第三方登陆
- 友盟第三方登录 QQ 微信 新浪微博 自定义友盟的dirlog
- iOS集成QQ、微信、微博、短信、邮件分享(非第三方集成)
- 安卓一键分享到qq,微信,微博,官方SDK非第三方
- android第三方(qq、微信、微博)登录和分享
- Android第三方分享和登录之微信及QQ篇
- 友盟微信、QQ分享 --- 分享纯文本