Android 第三方登录、分享(ShareSDK、友盟)

为下边的项目做准备,写一个第三方登录、分享的demo。分别使用sharesdk和友盟来实现。

先说一下我对两者的使用上的感觉,个人感觉sharesdk比友盟更好一点,好在哪里呢?好在人工服务上。在集成的过程中遇到了各种问题,但是sharesdk的人工服务做的很好,能给答疑解惑,提供解决问题的方法!
接下来上代码(本文使用android studio开发,sharesdk版本v2.7.7,友盟版本v6.0.0):

一、使用sharesdk(sharesdk版本v2.7.7)来集成:

1、要去官网:http://www.mob.com/  注册账号、添加应用、下载sdk、分别去新浪、微信、QQ开放平台注册应用,拿到key。准备好这些,就让咱们开始吧!
2、在清单文件中添加如下权限:

<uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.INTERNET" /> <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.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <!-- 蓝牙分享所需的权限 --> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

3、继续添加Activity的信息,**此处注意tencent后面的appid要保持和您配置的QQ的appid一致**:

<!-- 调用QQ,需要注册的回调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" > <intent-filter> <data android:scheme="tencent100371282" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <!-- 调用新浪原生SDK,需要注册的回调activity --> <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 --> <!--微信分享回调 --> <activity android:name=".wxapi.WXEntryActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" />

4、去assets目录下的ShareSdk.xml目录下修改准备好的QQ、微信、微博的key。
在此处注意:4.1、assets文件夹在main的根目录下。
          4.2、QQ和QZone使用的同一个AppId、AppKey
          4.3、微信和朋友圈、收藏使用同一个 AppId、AppSecret
          4.4、微博除去配置AppKey、AppSecret之外,还需要配置
    RedirectUrl="http://sns.whalecloud.com/sina2/callback"
    RedirectUrl的值和微博应用信息处的授权回调页保持一致

5、去添加微信的回调
    5.1、在包名的下边建立一个名字为“wxapi”的包
    5.2、把demo中的“WXEntryActivity”放进去,注意,这个类不需要动,不需要手动调用!!
    ![WXEntryActivity的位置](http://img.blog.csdn.net/20161015153103561)

6、去写代码吧
    提前准备PublicStaticData.java:

package com.example.lql.sharesdk.utils; import com.umeng.socialize.UMShareAPI; import cn.sharesdk.framework.ShareSDK; public class PublicStaticData { public static ShareSDK myShareSDK; public static UMShareAPI mShareAPI; }

6.0初始化
        PublicStaticData.myShareSDK= new ShareSDK();
        PublicStaticData.myShareSDK.initSDK(getApplicationContext());
    6.1、打开分享面板

/** * @param title 标题 * @param text 内容 * @param picurl 图片链接 * * QQ和QQ空间设置分享链接使用setTitleUrl(); * 设置标题:setTitle * 设置内容:setText * 设置网络图片:oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg"); * 设置本地图片: //oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片 * * 微信 * url仅在微信(包括好友和朋友圈)中使用 * oks.setUrl("http://qq.com"); */ private void showShare(String title,String text,String picurl) { OnekeyShare oks = new OnekeyShare(); //关闭sso授权 oks.disableSSOWhenAuthorize(); oks.setTitle(title); oks.setText(text); if(picurl!=null){ oks.setImageUrl(picurl); } // 启动分享GUI oks.show(this); }

6.2、分享到指定平台(此处使用微信和微博为例)

/** * 微信 在微信分享中,需要设置setShareType属性,此处应注意 * @param title * @param content * @param PicUrl * @param titleUrl * Platform.SHARE_TEXT(分享文本), Platform.SHARE_IMAGE(分享图片), Platform.SHARE_WEBPAGE(分享网页,既图文分享), Platform.SHARE_MUSIC(分享音频), Platform.SHARE_VIDEO(分享视频), Platform.SHARE_APPS(分享应用,仅微信支持), Platform.SHARE_FILE(分享文件,仅微信支持) Platform.SHARE_EMOJI(分享表情,仅微信支持) */ public static void shareWX(String title,String content,String PicUrl,String titleUrl){ type="share"; Wechat.ShareParams sp=new Wechat.ShareParams(); sp.setTitle(title); sp.setText(content); if(titleUrl!=null){ sp.setTitleUrl(titleUrl); // 标题的超链接 } if(PicUrl!=null){ sp.setImageUrl(PicUrl);// 图片地址 } sp.setShareType(Platform.SHARE_IMAGE); sp.setUrl("http://qq.com"); Platform wx = PublicStaticData.myShareSDK.getPlatform (Wechat.NAME); wx. setPlatformActionListener (mPlatformActionListener); // 设置分享事件回调 // 执行图文分享 wx.share(sp); } /** * 分享到微博 * @param text 文本内容 * @param picUrl 网络图片 (文档中说明分享图片需要审核通过,测试中体现不需要) */ public static void shareSina(String text,String picUrl){ type="share"; SinaWeibo.ShareParams sp = new SinaWeibo.ShareParams(); sp.setText(text); if(picUrl!=null){ sp.setImageUrl(picUrl); } Platform weibo = PublicStaticData.myShareSDK.getPlatform(SinaWeibo.NAME); weibo.setPlatformActionListener(mPlatformActionListener); // 设置分享事件回调 // 执行图文分享 weibo.share(sp); }

6.3第三方登录

/** * 登录 * @param name 登录方式(QQ.NAME、Wechat.NAME、SinaWeibo.NAME) */ public static void Login(String name){ type="login"; Platform mPlatform = ShareSDK.getPlatform(name); mPlatform.setPlatformActionListener(mPlatformActionListener); mPlatform.authorize();//单独授权,OnComplete返回的hashmap是空的 mPlatform.showUser(null);//授权并获取用户信息 }

6.4登录和分享回调(此处分享和登录使用的一个监听)

public static PlatformActionListener mPlatformActionListener= new PlatformActionListener() { @Override public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) { if(type.equals("login")){ Log.e("onComplete","登录成功"); Log.e("openid",platform.getDb().getUserId());//拿到登录后的openid Log.e("username",platform.getDb().getUserName());//拿到登录用户的昵称 }else{ Log.e("onComplete","分享成功"); } } @Override public void onError(Platform platform, int i, Throwable throwable) { Log.e("onError",throwable.toString()+""); if(type.equals("login")){ Log.e("onError","登录失败"+throwable.toString()); }else{ Log.e("onError","分享失败"+throwable.toString()); } } @Override public void onCancel(Platform platform, int i) { if(type.equals("login")){ Log.e("onCancel","登录取消"); }else{ Log.e("onCancel","分享取消"); } } };

7、至此使用ShareSDK集成常见分三种登录分享方式就完成了,整个过程没有遇到严重的问题,整体体验效果还不错。上整体代码ShareSDKUtils.java:

package com.example.lql.sharesdk.utils; import android.content.Context; import android.util.Log; import java.util.HashMap; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.PlatformActionListener; import cn.sharesdk.framework.ShareSDK; import cn.sharesdk.sina.weibo.SinaWeibo; import cn.sharesdk.tencent.qq.QQ; import cn.sharesdk.tencent.qzone.QZone; import cn.sharesdk.wechat.favorite.WechatFavorite; import cn.sharesdk.wechat.friends.Wechat; import cn.sharesdk.wechat.moments.WechatMoments; /** * Created by LQL on 2016/10/14. */ public class ShareSDKUtils { private static String type=""; /** * 分享到微博 * @param text 文本内容 * @param picUrl 网络图片 (通过审核后才能添加) */ public static void shareSina(String text,String picUrl,Context context){ type="share"; SinaWeibo.ShareParams sp = new SinaWeibo.ShareParams(); sp.setText(text); if(picUrl!=null){ sp.setImageUrl(picUrl); } Platform weibo = PublicStaticData.myShareSDK.getPlatform(SinaWeibo.NAME); weibo.setPlatformActionListener(mPlatformActionListener); // 设置分享事件回调 // 执行图文分享 weibo.share(sp); } /** * 分享到QQ空间 * @param title 标题 * @param content 内容 * @param PicUrl 图片 * @param titleUrl title链接 */ public static void shareQzone(String title,String content,String PicUrl,String titleUrl){ type="share"; QZone.ShareParams sp = new QZone.ShareParams(); sp.setTitle(title); sp.setText(content); if(titleUrl!=null){ sp.setTitleUrl(titleUrl); // 标题的超链接 } if(PicUrl!=null){ sp.setImageUrl(PicUrl); } Platform qzone = PublicStaticData.myShareSDK.getPlatform (QZone.NAME); qzone. setPlatformActionListener (mPlatformActionListener); // 设置分享事件回调 // 执行图文分享 qzone.share(sp); } /** * QQ * @param title * @param content * @param PicUrl * @param titleUrl */ public static void shareQQ(String title,String content,String PicUrl,String titleUrl){ type="share"; QQ.ShareParams sp=new QQ.ShareParams(); sp.setTitle(title); sp.setText(content); if(titleUrl!=null){ sp.setTitleUrl(titleUrl); // 标题的超链接 } if(PicUrl!=null){ sp.setImageUrl(PicUrl); } Platform qq = PublicStaticData.myShareSDK.getPlatform (QQ.NAME); qq. setPlatformActionListener (mPlatformActionListener); // 设置分享事件回调 // 执行图文分享 qq.share(sp); } /** * 收藏 * @param title * @param content * @param PicUrl * @param titleUrl */ public static void shareWXF(String title,String content,String PicUrl,String titleUrl){ type="share"; WechatFavorite.ShareParams sp=new WechatFavorite.ShareParams(); sp.setTitle(title); sp.setText(content); if(titleUrl!=null){ sp.setTitleUrl(titleUrl); // 标题的超链接 } if(PicUrl!=null){ sp.setImageUrl(PicUrl); } sp.setShareType(Platform.SHARE_IMAGE); sp.setUrl("http://www.163.com/"); Platform qq = PublicStaticData.myShareSDK.getPlatform (WechatFavorite.NAME); qq. setPlatformActionListener (mPlatformActionListener); // 设置分享事件回调 // 执行图文分享 qq.share(sp); } /** * 朋友圈 * @param title * @param content * @param PicUrl * @param titleUrl */ public static void shareWXM(String title,String content,String PicUrl,String titleUrl){ type="share"; WechatMoments.ShareParams sp=new WechatMoments.ShareParams(); sp.setTitle(title); sp.setText(content); if(titleUrl!=null){ sp.setTitleUrl(titleUrl); // 标题的超链接 } if(PicUrl!=null){ sp.setImageUrl(PicUrl); } sp.setShareType(Platform.SHARE_IMAGE); sp.setUrl("http://www.sina.com.cn"); Platform qq = PublicStaticData.myShareSDK.getPlatform (WechatMoments.NAME); qq. setPlatformActionListener (mPlatformActionListener); // 设置分享事件回调 // 执行图文分享 qq.share(sp); } /** * 微信 * @param title * @param content * @param PicUrl * @param titleUrl * Platform.SHARE_TEXT(分享文本), Platform.SHARE_IMAGE(分享图片), Platform.SHARE_WEBPAGE(分享网页,既图文分享), Platform.SHARE_MUSIC(分享音频), Platform.SHARE_VIDEO(分享视频), Platform.SHARE_APPS(分享应用,仅微信支持), Platform.SHARE_FILE(分享文件,仅微信支持) Platform.SHARE_EMOJI(分享表情,仅微信支持) */ public static void shareWX(String title,String content,String PicUrl,String titleUrl){ type="share"; Wechat.ShareParams sp=new Wechat.ShareParams(); sp.setTitle(title); sp.setText(content); if(titleUrl!=null){ sp.setTitleUrl(titleUrl); // 标题的超链接 } if(PicUrl!=null){ sp.setImageUrl(PicUrl); } sp.setShareType(Platform.SHARE_IMAGE); sp.setUrl("http://qq.com"); Platform wx = PublicStaticData.myShareSDK.getPlatform (Wechat.NAME); wx. setPlatformActionListener (mPlatformActionListener); // 设置分享事件回调 // 执行图文分享 wx.share(sp); } /** * 登录 */ public static void Login(String name){ type="login"; Platform mPlatform = ShareSDK.getPlatform(name); mPlatform.setPlatformActionListener(mPlatformActionListener); mPlatform.authorize();//单独授权,OnComplete返回的hashmap是空的 mPlatform.showUser(null);//授权并获取用户信息 } public static PlatformActionListener mPlatformActionListener= new PlatformActionListener() { @Override public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) { if(type.equals("login")){ Log.e("onComplete","登录成功"); Log.e("openid",platform.getDb().getUserId());//拿到登录后的openid Log.e("username",platform.getDb().getUserName());//拿到登录用户的昵称 }else{ Log.e("onComplete","分享成功"); } } @Override public void onError(Platform platform, int i, Throwable throwable) { Log.e("onError",throwable.toString()+""); if(type.equals("login")){ Log.e("onError","登录失败"+throwable.toString()); }else{ Log.e("onError","分享失败"+throwable.toString()); } } @Override public void onCancel(Platform platform, int i) { if(type.equals("login")){ Log.e("onCancel","登录取消"); }else{ Log.e("onCancel","分享取消"); } } }; }

在Activity中的使用

String picurl="http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg"; case R.id.openShare://打开分享面板,直接调用上边写到的方法 showShare("sharesdk测试","sharesdk测试",picurl); break; case R.id.QQLogin://QQ登录 ShareSDKUtils.Login(QQ.NAME); break; case R.id.WXLogin://微信登录 ShareSDKUtils.Login(Wechat.NAME); break; case R.id.SinaLogin://微博登录 ShareSDKUtils.Login(SinaWeibo.NAME); break; case R.id.WXLike://收藏分享(微信需要有图片) ShareSDKUtils.shareWXF("微信收藏分享测试标题sharesdk","微信收藏分享测试内容sharesdk",picurl,null); break; case R.id.WXfriendsshare://朋友圈分享(微信需要有图片) ShareSDKUtils.shareWXM("朋友圈分享测试标题sharesdk","朋友圈分享测试内容sharesdk",picurl,null); break; case R.id.WXshare://微信分享(微信需要有图片) ShareSDKUtils.shareWX("微信分享测试标题sharesdk","微信分享测试内容sharesdk",picurl,null); break; case R.id.Sinashare://微博分享 ShareSDKUtils.shareSina("Sina分享测试sharesdk",null,MainActivity.this); break; case R.id.QZONEshare://空间 ShareSDKUtils.shareQzone("Qzone分享测试标题sharesdk","Qzone分享测试内容sharesdk",picurl,null); break; case R.id.QQshare://QQ ShareSDKUtils.shareQQ("Qzone分享测试标题sharesdk","Qzone分享测试内容sharesdk",picurl,null); break;

二、使用友盟来集成(友盟版本v6.0.0(精简版)):

1、此处省略注册、下载sdk、准备key的过程,直接从集成开始。
2、权限:

<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.READ_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" />

3、添加Activity信息(此处使用微博精简版,新浪微博不需要回调Activity)**此处注意tencent后面的appid要保持和您配置的QQ的appid一致**:

<!-- ###################添加UmengAppkey###################### --> <meta-data android:name="UMENG_APPKEY" android:value="577c404367e58e6b1f001a40"> </meta-data> <!-- 调用微信,需要注册的回调activity --> <activity android:name=".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="tencent100424468" /> </intent-filter> </activity> <activity android:name="com.tencent.connect.common.AssistActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="orientation|keyboardHidden|screenSize"/>

4、上代码:

4.0初始化:

PlatformConfig.setWeixin("wx282305cc871b77bc", "bdf0b6e3ff283ec29a12abf40ff62c1a"); PlatformConfig.setSinaWeibo("170221996", "75314930606f946864ee0d7aeecc46ed"); Config.REDIRECT_URL = "http://sns.whalecloud.com/sina2/callback";//您新浪后台的回调地址 PlatformConfig.setQQZone("1105747496", "EVHTBI0P5NDpuNIZ"); UMShareAPI.get(this);

4.1打开分享面板

new ShareAction(MainActivity.this).withText("测试啊测试啊") .withTitle("测试啊测试啊") .withMedia(new UMImage(MainActivity.this, picurl)) .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN,SHARE_MEDIA.QZONE,SHARE_MEDIA.WEIXIN_CIRCLE,SHARE_MEDIA.WEIXIN_FAVORITE) .setCallback(umShareListener).open();

4.2分享到置顶平台

/** * 分享 * @param mActivity * @param title 标题 * @param context 内容 * @param Sharetype 分享方式 * SHARE_MEDIA.WEIXIN_FAVORITE * SHARE_MEDIA.WEIXIN_CIRCLE * SHARE_MEDIA.WEIXIN * SHARE_MEDIA.SINA * SHARE_MEDIA.QZONE * SHARE_MEDIA.QQ * @param picurl 图片地址 */ public static void SharePic(Activity mActivity,String title,String context,SHARE_MEDIA Sharetype,String picurl){ UmengShare.myActivity=mActivity; if(picurl!=null){ new ShareAction(mActivity).setPlatform(Sharetype) .withText(context) .withTitle(title) .withMedia(new UMImage(mActivity,picurl)) .setCallback(umShareListener) .share(); }else{ new ShareAction(mActivity).setPlatform(Sharetype) .withText(context) .withTitle(title) .setCallback(umShareListener) .share(); } }

4.3分享监听回调

/** * 分享监听 */ public static UMShareListener umShareListener = new UMShareListener() { @Override public void onResult(SHARE_MEDIA platform) { Log.d("plat","platform"+platform); Toast.makeText(myActivity, platform + " 分享成功啦", Toast.LENGTH_SHORT).show(); } @Override public void onError(SHARE_MEDIA platform, Throwable t) { Toast.makeText(myActivity,platform + " 分享失败啦", Toast.LENGTH_SHORT).show(); if(t!=null){ Log.d("throw","throw:"+t.getMessage()); } } @Override public void onCancel(SHARE_MEDIA platform) { Toast.makeText(myActivity,platform + " 分享取消了", Toast.LENGTH_SHORT).show(); } };

4.4 登录

/** * 第三方登录 * @param mActivity * @param type 登录方式 * SHARE_MEDIA.QQ * SHARE_MEDIA.WEIXIN * SHARE_MEDIA.SINA */ public static void UmengLogin(Activity mActivity,SHARE_MEDIA type){ UmengShare.myActivity=mActivity; PublicStaticData.mShareAPI = UMShareAPI.get( mActivity ); PublicStaticData.mShareAPI.doOauthVerify(mActivity,type, umAuthListener); }

4.5 登录回调

/** * 第三方登录监听 */ public static UMAuthListener umAuthListener = new UMAuthListener() { @Override public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) { Toast.makeText(myActivity, "授权成功", Toast.LENGTH_SHORT).show(); Log.e("data",data.toString()); } @Override public void onError(SHARE_MEDIA platform, int action, Throwable t) { Toast.makeText( myActivity, "授权失败", Toast.LENGTH_SHORT).show(); Log.e("data",t.toString()+""); } @Override public void onCancel(SHARE_MEDIA platform, int action) { Toast.makeText( myActivity, "关闭授权", Toast.LENGTH_SHORT).show(); Log.e("data","关闭授权"); } };

5.在一些低端手机上可能会出现QQ没有回调的情况,需要在Activity中添加如下代码:

/** * 友盟QQ登录需要的回调 在有些低端手机上登录之后不走回调,需要这个方法 * @param requestCode * @param resultCode * @param data */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); UMShareAPI.get(this).HandleQQError(MainActivity.this,requestCode,umAuthListener); PublicStaticData.mShareAPI.onActivityResult(requestCode, resultCode, data); }

6、同样是没有回调,这次是微信,需要在WXEntryActivity中加入代码:

@Override protected void handleIntent(Intent intent){ mWxHandler.setAuthListener(new UMAuthListener() { @Override public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) { Log.e("UMWXHandler fsdfsdfs"+data.toString()); } @Override public void onError(SHARE_MEDIA platform, int action, Throwable t) { Log.e("UMWXHandler fsdfsdfs",t.toString()); } @Override public void onCancel(SHARE_MEDIA platform, int action) { Log.e("UMWXHandler fsdfsdfs","onCancel"); } }); super.handleIntent(intent); }

7、至此使用友盟集成常见分三种登录分享方式就完成了。上整体代码UmengShare.java:

package com.example.lql.sharesdk.utils; import android.Manifest; import android.app.Activity; import android.os.Build; import android.support.v4.app.ActivityCompat; import android.util.Log; import android.widget.Toast; 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; import java.util.Map; /** * Created by LQL on 2016/10/15. */ public class UmengShare { private static Activity myActivity; /** * 分享 * @param mActivity * @param title 标题 * @param context 内容 * @param Sharetype 分享方式 * SHARE_MEDIA.WEIXIN_FAVORITE * SHARE_MEDIA.WEIXIN_CIRCLE * SHARE_MEDIA.WEIXIN * SHARE_MEDIA.SINA * SHARE_MEDIA.QZONE * SHARE_MEDIA.QQ * @param picurl 图片地址 */ public static void SharePic(Activity mActivity,String title,String context,SHARE_MEDIA Sharetype,String picurl){ UmengShare.myActivity=mActivity; if(picurl!=null){ new ShareAction(mActivity).setPlatform(Sharetype) .withText(context) .withTitle(title) .withMedia(new UMImage(mActivity,picurl)) .setCallback(umShareListener) .share(); }else{ new ShareAction(mActivity).setPlatform(Sharetype) .withText(context) .withTitle(title) .setCallback(umShareListener) .share(); } } /** * 第三方登录 * @param mActivity * @param type 登录方式 * SHARE_MEDIA.QQ * SHARE_MEDIA.WEIXIN * SHARE_MEDIA.SINA */ public static void UmengLogin(Activity mActivity,SHARE_MEDIA type){ UmengShare.myActivity=mActivity; PublicStaticData.mShareAPI = UMShareAPI.get( mActivity ); PublicStaticData.mShareAPI.doOauthVerify(mActivity,type, umAuthListener); } /** * 第三方登录监听 */ public static UMAuthListener umAuthListener = new UMAuthListener() { @Override public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) { Toast.makeText(myActivity, "授权成功", Toast.LENGTH_SHORT).show(); Log.e("data",data.toString()); } @Override public void onError(SHARE_MEDIA platform, int action, Throwable t) { Toast.makeText( myActivity, "授权失败", Toast.LENGTH_SHORT).show(); Log.e("data",t.toString()+""); } @Override public void onCancel(SHARE_MEDIA platform, int action) { Toast.makeText( myActivity, "关闭授权", Toast.LENGTH_SHORT).show(); Log.e("data","关闭授权"); } }; /** * 分享监听 */ public static UMShareListener umShareListener = new UMShareListener() { @Override public void onResult(SHARE_MEDIA platform) { Log.d("plat","platform"+platform); Toast.makeText(myActivity, platform + " 分享成功啦", Toast.LENGTH_SHORT).show(); } @Override public void onError(SHARE_MEDIA platform, Throwable t) { Toast.makeText(myActivity,platform + " 分享失败啦", Toast.LENGTH_SHORT).show(); if(t!=null){ Log.d("throw","throw:"+t.getMessage()); } } @Override public void onCancel(SHARE_MEDIA platform) { Toast.makeText(myActivity,platform + " 分享取消了", Toast.LENGTH_SHORT).show(); } }; }

在Activity中使用:

case R.id.openShareUmeng://分享面板 new ShareAction(MainActivity.this).withText("测试啊测试啊") .withTitle("测试啊测试啊") .withMedia(new UMImage(MainActivity.this, picurl)) .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN,SHARE_MEDIA.QZONE,SHARE_MEDIA.WEIXIN_CIRCLE,SHARE_MEDIA.WEIXIN_FAVORITE) .setCallback(umShareListener).open(); break; case R.id.QQLoginUmeng://QQ登录 UmengShare.UmengLogin(MainActivity.this,SHARE_MEDIA.QQ); break; case R.id.WXLoginUmeng://微信登录 UmengShare.UmengLogin(MainActivity.this,SHARE_MEDIA.WEIXIN); break; case R.id.SinaLoginUmeng://微博登录 UmengShare.UmengLogin(MainActivity.this,SHARE_MEDIA.SINA); break; case R.id.WXLikeUmeng://收藏分享(微信需要有图片) UmengShare.SharePic(MainActivity.this,"测试收藏","测试收藏内容",SHARE_MEDIA.WEIXIN_FAVORITE,picurl); break; case R.id.WXfriendsshareUmeng://朋友圈分享(微信需要有图片) UmengShare.SharePic(MainActivity.this,"测试朋友圈","测试朋友圈内容",SHARE_MEDIA.WEIXIN_CIRCLE,picurl); break; case R.id.WXshareUmeng://微信分享(微信需要有图片) UmengShare.SharePic(MainActivity.this,"测试分享","测试分享内容",SHARE_MEDIA.WEIXIN,picurl); break; case R.id.SinashareUmeng://微博分享 UmengShare.SharePic(MainActivity.this,"测试微博","测试微博内容",SHARE_MEDIA.SINA,null); break; case R.id.QZONEshareUmeng://空间 UmengShare.SharePic(MainActivity.this,"测试空间","测试空间内容",SHARE_MEDIA.QZONE,null); break; case R.id.QQshareUmeng://QQ UmengShare.SharePic(MainActivity.this,"测试QQ","测试QQ内容",SHARE_MEDIA.QQ,null); break;

最后,两种方式都集成好了,小伙伴们赶紧去使用吧。本人能力有效,如果bug纯属正常!建议使用ShareSDK!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-09-24 07:06:18

Android 第三方登录、分享(ShareSDK、友盟)的相关文章

Android 第三方登录、分享(ShareSDK、友盟)_Android

为下边的项目做准备,写一个第三方登录.分享的demo.分别使用sharesdk和友盟来实现. 先说一下我对两者的使用上的感觉,个人感觉sharesdk比友盟更好一点,好在哪里呢?好在人工服务上.在集成的过程中遇到了各种问题,但是sharesdk的人工服务做的很好,能给答疑解惑,提供解决问题的方法! 接下来上代码(本文使用android studio开发,sharesdk版本v2.7.7,友盟版本v6.0.0): 一.使用sharesdk(sharesdk版本v2.7.7)来集成: 1.要去官网:

android、第三方登录-Android第三方登录demo(特别是微信)

问题描述 Android第三方登录demo(特别是微信) 目前QQ第三方登录已经实现,但是微信的感觉官方的demo不行,需要一个可以微信登录的demo借我研究一下.感谢! 解决方案 Android第三方登录--微信登录Android微信第三方登录接入android集成第三方微信登录 解决方案二: 你百度一下Mob,以前叫ShareSDK的

Android第三方登录之QQ登录

本文实例为大家分享了Android第三方登录之QQ的具体代码,供大家参考,具体内容如下 第三方登录之QQ 代码区 public class MainActivity extends AppCompatActivity { private Button btn; private TextView tv; private ImageView image; @Override protected void onCreate(Bundle savedInstanceState) { super.onCr

友盟新浪微博授权提示“找不到文件C8998”的解决办法

探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Android多分辨率适配框架(3)- 使用指南 自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View

Android:友盟的自动更新组件

又好又专业的服务能帮开发者省很多时间.一开始做项目也准备自己来统计数据.自己做自动更新,随着使用友盟服务的时间增加,渐渐放弃了这种想法,转而研究如何更充分的使用,这里分享一下使用自动更新组件的心得. 一.缺少res导致不能升级的问题 由于缺少了解,官网文档也没用提醒,仅仅拷贝了SDK的jar到工程里,一直不知道到底升级功能是否已经实现,关键是也不报错!今天又拿出来测试了一下,监听了一下UmengUpdateListener接口,发现客户端已经检测到了更新,但是没用弹出更新的对话框,然后就注意到了

Android微信第三方登录(个人笔记)_Android

今天在写微信登录,花了半天时间搞定.然后写下自己的笔记,希望帮助更多的人.欢迎各位指教. 微信授权登录,官方说的不是很清楚.所以导致有一部分的坑. 微信注册应用平台的应用签名,下载 微信签名生成工具 输入项目的packageName也可以查看到. (注意:debug.Release 一定要区分,因为2种生成的微信签名不一致,会导致没有跳转.回调....一般在微信开发者上面注册的是正式环境打包好的.)     申请微信开发者账号.应用申请省略.   1. AndroidManifest.xml 权

sdk-android 第三方登录 qq登录

问题描述 android 第三方登录 qq登录 做第三方登录时以qq为例用的是2.9.3的版本的sdk,可以实现登录但是为什么不能返回回调获取userinfo? 出现的log是 10-23 16:42:17.754: E/openSDK_LOG.UIListenerManager(5181): setListener action is null! rquestCode=11101 解决方案 使用的是Android_SDK_V2.9.1,建议使用最新版: 官方下载:SDK下载 ?Android

Android关于友盟分享到新浪微博返回5004错误的求解

问题描述 Android关于友盟分享到新浪微博返回5004错误的求解 如题,什么情况,没有绑定appid到友盟后台的,直接使用友盟默认的, 解决方案 Android新浪微博分享Android分享到新浪微博Android分享到新浪微博 解决方案二: 你要对应微博等SDK,查看5004对应的错误码具体是什么错误信息,这样你才好分析修改 解决方案三: http://dev.umeng.com/social/android/detail-share#8 这个地址,按照说明打开log,然后看具体是什么错误

android友盟分享QQ和QQ空间时出现内存泄露

问题描述 android友盟分享QQ和QQ空间时出现内存泄露 05-12 19:22:46.570: E/StrictMode(30304): A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks. 05-12 19:22:46.570: E/StrictMode(30304): jav