Android 项目必备(三十七)-->使用友盟集成 QQ、微信、微博等第三方分享与登录
文章目录
- 效果图
- 实战
最近项目需要加入第三方分享和登录功能,之前其他项目的第三方分享和登录一直都使用ShareSDK实现的。为了统一使用友盟的全家桶,所以三方分享和登录也就选择了友盟。
效果图
实战
1. 申请友盟 Appkey
直接到友盟官网申请:友盟 SDK
2. 下载 SDK
3. 准备资源
使用友盟的集成工具快速集成友盟的分享SDK:双击 友盟集成工具.jar– 选择使用的平台和IDE,如图:
点击 OK 键,会在当前目录生成名为 umeng_integratetool_result
的文件夹,如图:
4. 开始集成
- 将上面的文件夹依次粘贴到工程相应的文件夹即可,如图:
- 将
debug.keystore
文件拷贝到项目的app
目录下(对应app build中相应的位置),目的是为了使用友盟的签名,如图:
- 添加回调 Activity
- 微信回调:
其实在第一步拷贝的时候已经添加了。即在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity - QQ与新浪微博的回调:
QQ与新浪不需要添加Activity,但需要在使用QQ分享或者授权的Activity中添加如下代码:
- 微信回调:
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
5. 配置清单文件 Android Manifest.xml
- 添加权限:
<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.ACCESS_FINE_LOCATION" / <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" / <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /
- 添加sdk中需要的Activity
<!--微信-- <activityandroid:name=".wxapi.WXEntryActivity"android:configChanges="keyboardHidden|orientation|screenSize"android:exported="true"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar"/ <!--新浪微博-- <activityandroid:name=".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 <!--qq精简版-- <activityandroid:name="com.umeng.qq.tencent.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"/ <!--这里的scheme是qq分享要用的,100424468为自己申请的appid,真实项目中需要替换-- <data android:scheme="tencent100424468"/ </intent-filter </activity <activityandroid:name="com.umeng.qq.tencent.AssistActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar"/ <!--分享编辑页-- <activityandroid:name="com.umeng.socialize.editorpage.ShareActivity"android:excludeFromRecents="true"android:theme="@style/Theme.UMDefault"/
- 添加友盟appkey
<meta-dataandroid:name="UMENG_APPKEY"android:value="561**********990035bf" </meta-data
6. 配置三方 appkey
新建 MyApplication 继承 Application(注意:需要在清单文件中配置该MyApplication),在 MyApplication 文件中配置三方平台的 appkey 和初始化 sdk。如下:
public class MyApplication extends Application { @Overridepublic void onCreate() { super.onCreate();UMShareAPI.get(this);//初始化sdk//开启debug模式,方便定位错误,具体错误检查方式可以查看http://dev.umeng.com/social/android/quick-integration的报错必看,正式发布,请关闭该模式Config.DEBUG = true;} //各个平台的配置{ //微信PlatformConfig.setWeixin("wxdc1e388c3822c80b", "key1"); //新浪微博(第三个参数为回调地址)PlatformConfig.setSinaWeibo("3921700954", "key2","http://sns.whalecloud.com/sina2/callback"); //QQPlatformConfig.setQQZone("100424468", "key3");}
}
7. 登录代码 MainActivity.java
public class MainActivity extends AppCompatActivity { private String TAG = this.getClass().getSimpleName(); @Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);} public void qqLogin(View view) {authorization(SHARE_MEDIA.QQ);} public void weiXinLogin(View view) {authorization(SHARE_MEDIA.WEIXIN);} public void sinaLogin(View view) {authorization(SHARE_MEDIA.SINA);} //授权private void authorization(SHARE_MEDIA share_media) {UMShareAPI.get(this).getPlatformInfo(this, share_media, new UMAuthListener() { @Overridepublic void onStart(SHARE_MEDIA share_media) {Log.d(TAG, "onStart " + "授权开始");} @Overridepublic void onComplete(SHARE_MEDIA share_media, int i, Map<String, String map) {Log.d(TAG, "onComplete " + "授权完成"); //sdk是6.4.4的,但是获取值的时候用的是6.2以前的(access_token)才能获取到值,未知原因String uid = map.get("uid");String openid = map.get("openid");//微博没有String unionid = map.get("unionid");//微博没有String access_token = map.get("access_token");String refresh_token = map.get("refresh_token");//微信,qq,微博都没有获取到String expires_in = map.get("expires_in");String name = map.get("name");String gender = map.get("gender");String iconurl = map.get("iconurl");Toast.makeText(getApplicationContext(), "name=" + name + ",gender=" + gender, Toast.LENGTH_SHORT).show(); //拿到信息去请求登录接口。。。} @Overridepublic void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {Log.d(TAG, "onError " + "授权失败");} @Overridepublic void onCancel(SHARE_MEDIA share_media, int i) {Log.d(TAG, "onCancel " + "授权取消");}});} @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);}
}
8. 分享代码
public class MainActivity extends AppCompatActivity { private String TAG = this.getClass().getSimpleName(); @Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);} public void qq(View view) {ShareUtils.shareWeb(this, Defaultcontent.url, Defaultcontent.title, Defaultcontent.text, Defaultcontent.imageurl, R.mipmap.icon_logo_share, SHARE_MEDIA.QQ);} public void weiXin(View view) {ShareUtils.shareWeb(this, Defaultcontent.url, Defaultcontent.title, Defaultcontent.text, Defaultcontent.imageurl, R.mipmap.icon_logo_share, SHARE_MEDIA.WEIXIN);} public void weixinCircle(View view) {ShareUtils.shareWeb(this, Defaultcontent.url, Defaultcontent.title, Defaultcontent.text, Defaultcontent.imageurl, R.mipmap.icon_logo_share, SHARE_MEDIA.WEIXIN_CIRCLE);} public void sina(View view) {ShareUtils.shareWeb(this, Defaultcontent.url, Defaultcontent.title, Defaultcontent.text, Defaultcontent.imageurl, R.mipmap.icon_logo_share, SHARE_MEDIA.SINA);} public void Qzone(View view) {ShareUtils.shareWeb(this, Defaultcontent.url, Defaultcontent.title, Defaultcontent.text, Defaultcontent.imageurl, R.mipmap.icon_logo_share, SHARE_MEDIA.QZONE);} @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);}
9. 分享工具类ShareUtils.java:
public class ShareUtils { /*** 分享链接*/public static void shareWeb(final Activity activity, String WebUrl, String title, String description, String imageUrl, int imageID, SHARE_MEDIA platform) {UMWeb web = new UMWeb(WebUrl);//连接地址web.setTitle(title);//标题web.setDescription(description);//描述if (TextUtils.isEmpty(imageUrl)) {web.setThumb(new UMImage(activity, imageID)); //本地缩略图} else {web.setThumb(new UMImage(activity, imageUrl)); //网络缩略图} new ShareAction(activity).setPlatform(platform).withMedia(web).setCallback(new UMShareListener() { @Overridepublic void onStart(SHARE_MEDIA share_media) {} @Overridepublic void onResult(final SHARE_MEDIA share_media) {activity.runOnUiThread(new Runnable() { @Overridepublic void run() { if (share_media.name().equals("WEIXIN_FAVORITE")) {Toast.makeText(activity, share_media + " 收藏成功", Toast.LENGTH_SHORT).show();} else {Toast.makeText(activity, share_media + " 分享成功", Toast.LENGTH_SHORT).show();}}});} @Overridepublic void onError(final SHARE_MEDIA share_media, final Throwable throwable) { if (throwable != null) {Log.d("throw", "throw:" + throwable.getMessage());}activity.runOnUiThread(new Runnable() { @Overridepublic void run() {Toast.makeText(activity, share_media + " 分享失败", Toast.LENGTH_SHORT).show();}});} @Overridepublic void onCancel(final SHARE_MEDIA share_media) {activity.runOnUiThread(new Runnable() { @Overridepublic void run() {Toast.makeText(activity, share_media + " 分享取消", Toast.LENGTH_SHORT).show();}});}}).share(); //新浪微博中图文+链接/*new ShareAction(activity).setPlatform(platform).withText(description + " " + WebUrl).withMedia(new UMImage(activity,imageID)).share();*/}
}
Android 项目必备(三十七)-->使用友盟集成 QQ、微信、微博等第三方分享与登录相关推荐
- Android友盟集成QQ、微信、微博等第三方登录与分享
前言 最近项目需要加入第三方分享和登录功能,之前其他项目的第三方分享和登录一直都使用ShareSDK实现的.为了统一使用友盟的全家桶,所以三方分享和登录也就选择了友盟.这里记录一下完整的集成与使用流程 ...
- Android友盟集成QQ登陆详解大全
第一步打开友盟官网注册一个账号,登录如下图进行操作点击个人中心 进入下一个界面点击管理创建一个应用生成AppKey:如下图 返回首页点击SDK与文档点击进行第三方登录集成点击右边的SDK下载选择你需要 ...
- 友盟集成QQ第三方登录
友盟官网 将集成的包里面的东西都复制进项目里面libs,res分别复制进去 libs里面的jar包 add to module 新建App继承application public class App ...
- 友盟集成第三方登录--微信、QQ实现
友盟集成了第三方登录,本给我们带来便利,但是文档只描述了集成方式,出现问题,发现还得自己各种baidu,这里总结自己遇到的一些坑,以防下次再踩. 友盟集成第三方微信登录: 友盟集成方案参考:http: ...
- 友盟集成小米华为(快速集成和厂商通道集成)
友盟集成小米华为(快速集成和厂商通道集成) 内含很多本人遇到的坑 (上) 快速集成 如果您已经弄好了快速集成,想看厂商通道集成,请直接看下篇 快速集成 首先,毋庸置疑,实在友盟官方平台注册账号 链接: ...
- 友盟第三方QQ登录,报错注意,使用友盟社会化组件的微博SSO功能,需要按照文档要求在xcode设置url scheme!
错误信息: ------------------------------------------ ------------------------------------------ 注意,使用友盟社 ...
- 友盟集成微信分享,显示您的设备没有安装微信问题及解决办法
问题描述: 友盟集成微信分享功能,当点击分享到微信好友和朋友圈时,提示:您的设备没有安装微信,但事实上我的手机上已经安装了微信. 解决办法: 查看官方文档:http://dev.umeng.com/s ...
- umeng(友盟)集成
1.umeng(友盟)集成--------认识umeng 2.cocos2dx + xcode集成umeng统计分析sdk 3.测试umeng统计分析功能
- Android 项目必备(三十八)-->APP 消息推送
文章目录 前言 推送的实现方式 1. C2DM 2. 轮询 3. SMS信令推送 4. MQTT协议 5. XMPP协议 6. 使用第三方平台 Android 中 MQTT 的使用 1. 集成 2. ...
最新文章
- 如何营造专属你的企业技术影响力氛围感?我不允许你还不知道
- python 通过shutil.move移动图片出错xe5\xb8\xb8\xe7
- Winforn中DevExpress的TreeList中显示某路径下的所有目录和文件(附源码下载)
- 记录 之 Argparse 中的 可选参数 action 用法
- asp.net 开发注意的几点
- Linux中使用netstat命令的基本操作,排查端口号的占用情况
- 信息安全工程师笔记-数据库安全
- java 实现二分法
- 一文详解 Serverless 技术选型
- 六款Linux常用远程连接工具介绍,看看哪一款最适合你
- matlab 画散点图后添加趋势线
- python对接蚂蚁验证码平台
- 引央视主播康辉大笑的度晓晓,是个只会吹彩虹屁的 AI 助手吗?
- Win10关闭显示器后立即锁定
- Android实现选择相册图片---类似微信的选择图片页面
- 徐磊语法 6 7 时态的正确定义
- 实验4 基于预测分析表法的语法分析程序_第三十届 脑功能磁共振数据处理分析培训班...
- 数据结构与算法--递归(factorial)
- Issues:Frequency out of range: (expecting between 112.50Hz and 275.00Hz, measured 99.85Hz)
- java反射中method类中的invoke方法是做什么的,他有什么作用?
热门文章
- Matlab中readtable用法
- 关于label smoothing的理解
- 计算机网络复习--名词解释
- Optional int parameter ‘id‘ is present but cannot be translated into a null
- hibernate 报错: ``` WARN: GenerationTarget encountered exception accepting command : Error executing
- DAO设计-原理和实现
- unity shader forge右侧方法栏
- PyQt5教程(十二)——实现QQ登录界面(六、实现鼠标拖动界面,鼠标事件)
- 2022全年度吸尘器十大热门品牌销量榜单
- 计算机科学 课程主页