Android 实现微信QQ分享以及第三方登录
集成准备
在微信开放平台创建移动应用,输入应用的信息,包括移动应用名称,移动应用简介,移动应用图片信息,点击下一步,选择Android 应用,填写信息提交审核。
获取Appkey
集成【友盟+】SDK之前,您首先需要到 【友盟+】官网注册并且添加新应用,获得Appkey。
1、填写应用基本信息,获取AppKey
首先添加新应用,输入应用名和选择平台信息,选择应用类别,点击提交冰获取应用appKey,得到Android 唯一Appkey
2、下载SDK并去集成
找到 https://developer.umeng.com/sdk/android界面,选择社会化分享 SDK,,点击设置,选择需要分享的平台,点击下载,下载解压后,将common文件夹下的文件夹拷贝到项目中,再将share文件夹下的main文件夹以及platforms(选择你想使用的平台即可)和shareboard文件夹下对应的资源文件和jar放入你的工程。
3、添加回调Activity
微信
在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。
支付宝
与微信相似,支付宝需要在包名目录下创建apshare文件夹,然后建立一个ShareEntryActivity的类,继承ShareCallbackActivity。
QQ与新浪
QQ与新浪不需要添加Activity,但需要在使用QQ分享或者授权的Activity中,添加
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); }注意onActivityResult不可在fragment中实现,如果在fragment中调用登录或分享,需要在fragment依赖的Activity中实现
4、配置Android Manifest XML
- 微信:
- qq(请注意将我们的qq appkey替换成您自己的qq appkey):
5、权限添加
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.INTERNET" />如果需要使用QQ纯图分享或避免其它平台纯图分享的时候图片不被压缩,可以增加以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>请查看你的build.gradle文件,如果 targetSdkVersion小于或等于22,可以忽略这一步,如果大于或等于23,需要做权限的动态申请:
其中123是requestcode,可以根据这个code判断,用户是否同意了授权。如果没有同意,可以根据回调进行相应处理:
@Override public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {}添加读写文件的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> if(Build.VERSION.SDK_INT>=23){String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.CALL_PHONE,Manifest.permission.READ_LOGS,Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.SET_DEBUG_APP,Manifest.permission.SYSTEM_ALERT_WINDOW,Manifest.permission.GET_ACCOUNTS,Manifest.permission.WRITE_APN_SETTINGS};ActivityCompat.requestPermissions(this,mPermissionList,123);}6、初始化设置
初始化需要在您的Application中调用我们的初始化接口:
private void initUMeng() {PlatformConfig.setWeixin("微信 id", "微信 secret");PlatformConfig.setQQZone("QQ id", "QQ key");// 一些分享配置UMShareConfig config = new UMShareConfig();config.isOpenShareEditActivity(true);config.isNeedAuthOnGetUserInfo(true);config.setSinaAuthType(UMShareConfig.AUTH_TYPE_SSO);UMShareAPI.get(getApplicationContext()).setShareConfig(config);}U-Share基础功能
分享
友盟分享分为两种形式:
- 使用分享面板的分享,用户可以调用我们的打开分享面板的方法,点击分享面板的对应平台进行分享。
- 不使用分享面板的分享,用户可以自己写分享按钮,或者触发事件,然后调用我们的分享方法,进行分享。简而言之,直接分享就是在用户自己的界面组件中插入分享行为,分享面板是打开我们写好的一个界面组件,根据点击事件进行分享。
分享(带面板)
打开分享面板的代码如下:
new ShareAction(MainActivity.this).withText("hello") .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN).setCallback(umShareListener).open();不带面板
new ShareAction(MainActivity.this) .setPlatform(SHARE_MEDIA.QQ)//传入平台 .withText("hello")//分享内容 .setCallback(umShareListener)//回调监听器 .share();其中umShareListener为回调监听,构建如下:
private UMShareListener shareListener = new UMShareListener() {/*** @descrption 分享开始的回调* @param platform 平台类型*/@Overridepublic void onStart(SHARE_MEDIA platform) {}/*** @descrption 分享成功的回调* @param platform 平台类型*/@Overridepublic void onResult(SHARE_MEDIA platform) {Toast.makeText(ShareDetailActivity.this,"成功了",Toast.LENGTH_LONG).show();}/*** @descrption 分享失败的回调* @param platform 平台类型* @param t 错误原因*/@Overridepublic void onError(SHARE_MEDIA platform, Throwable t) {Toast.makeText(ShareDetailActivity.this,"失败"+t.getMessage(),Toast.LENGTH_LONG).show();}/*** @descrption 分享取消的回调* @param platform 平台类型*/@Overridepublic void onCancel(SHARE_MEDIA platform) {Toast.makeText(ShareDetailActivity.this,"取消了",Toast.LENGTH_LONG).show();}};更多的可以参照友盟文档
https://developer.umeng.com/docs/66632/detail/66639
登录功能
登录使用(获取微信QQ详细信息,用户名等):
img_qq.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {UMShareAPI.get(LoginActivity.this).getPlatformInfo(LoginActivity.this, SHARE_MEDIA.QQ, authListener);}});img_wechat.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {UMShareAPI.get(LoginActivity.this).getPlatformInfo(LoginActivity.this, SHARE_MEDIA.WEIXIN, authListener);}});UMAuthListener authListener = new UMAuthListener() {@Overridepublic void onStart(SHARE_MEDIA platform) {}@Overridepublic void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {String temp = "";for (String key : data.keySet()) {temp = temp + key + " : " + data.get(key) + "\n";}toastMsg(temp);}@Overridepublic void onError(SHARE_MEDIA platform, int action, Throwable t) {toastMsg("错误" + t.getMessage());}@Overridepublic void onCancel(SHARE_MEDIA platform, int action) {}};/*** 接收登录返回数据** @param requestCode* @param resultCode* @param data*/@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);}
转载于:https://www.cnblogs.com/chhom/p/4794524.html
总结
以上是生活随笔为你收集整理的Android 实现微信QQ分享以及第三方登录的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 曲线用线性拟合可以,用相对响应因子就不满
- 下一篇: 改变手机浏览器(iPhone/Andro