安卓第三方友盟登录与分享
第一次写博客有写的不好的地方,请大家见谅,我会尽量写得更加细节
在初学这中实现第三方QQ登录微信登录时会遇到很多问题,现在我讲讲一下之前我遇到的那些问题。
其实在友盟实现第三方登录时,由于文档有些细节写得不是很清楚,导致很多很多新手在仿照友盟demo时总是适配不对。下面我讲讲如何进行友盟实现第三方登录
在此之前你需要申请友盟的APPKEY QQ的appid appkey 微信的APPID APPSECRET
第一:导入SKD
导入友盟demo里面所有SDK包(这里面还包含了很多其他比如说新浪,支付宝,facebook等一些SDK如果分不清也可以一起导入),其次还需要在dome中的libs文件下的arm64-v8a,armeabi,mips,mips64,x86,x86-64分别有libweibosdk.so文件都导入到自己工程里面相对用的文件中来。(这里提醒一下libweibosdk.so的文件名相同,但是都不一样千万别倒错位置了,一定要对应的导入)还有res文件也有相对应的地方需要加入一些友盟demo一些文件以及图片。
第二:配置Manifest.XML文件
在配置Manifest.XML首先是权限设置
<这里面有在友盟的文档中写得比较清楚>
<!-- ###################声明SDK使用的相关权限###################### --><!-- 检测网络状态 --><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" /><!-- 获取mac地址作为用户的备用唯一标识 --><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" /><!-- 获取用户手机的IMEI,用来唯一的标识用户 --><uses-permissionandroid:name="android.permission.READ_PHONE_STATE" /><!-- 缓存资源优先存入SDcard --><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 允许应用程序联网,以便向我们的服务器端发送数据 --><uses-permissionandroid:name="android.permission.INTERNET" /><!-- QQ、QQ空间所需权限 --><uses-permissionandroid:name="android.permission.GET_TASKS" />
<!-- ###################注册SDK使用的Activity###################### --><!--分享编辑页--><activityandroid: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>
QQ的基本也直接粘贴复制
<!-- 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="tencentxxxxxxxxxxxxxxx" />//这里需要填写你申请QQ的APPID
</intent-filter>
</activity>
<activityandroid:name="com.tencent.connect.common.AssistActivity"android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:screenOrientation="portrait"></activity>
微信
<!-- 微信 -->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!-- twitter -->
<activity
android:name="com.umeng.socialize.handler.TwitterWebActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
注意:这里需要强调一下
如果在您的项目中集成了微信或者微信朋友圈,并且您需要准确的分享回调,则需要在AndroidManifest.xml中下注册下面的回调Activity。
然后将下载的demo中的platforms/weixin目录下的wxapi文件夹拷贝到您的工程的包目录下, 然后修改WXEntryActivity的完整路径即可。
例如social_sdk_example的包名为com.umeng.soexample,因此将wxapi文件夹拷贝到com.umeng.soexample下,最终WXEntryActivity的 完整路径为com.umeng.soexample.wxapi.WXEntryActivity。
其中分享的回调接口SnsPostListener的onComplete方法的第二个参数代表分享的状态码,当值为200时表示分享成功;其余的值则为分享失败
<!--------添加友盟的KEY-------------->
<meta-data
android:name="UMENG_APPKEY"
android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" >
</meta-data>
<meta-data
android:name="UMENG_CHANNEL"
android:value="Umeng" >
</meta-data>
第三:在application类中加入QQ的APPID,APPKEY和微信的APPID和APPSECRET
各个平台的配置,建议放在全局Application或者程序入口
{
PlatformConfig.setQQZone("110XXXXXXXXXX", "KaDFXXXXXXXX");
PlatformConfig.setWeixin("wxeda5XXXXXXXXXX", "5f48db6a1efXXXXXXXX");
}
第四,代码
这里面的代码也就可以基本复制友盟demo的就可以了。
//实现微信QQ登录
public class LoginActivity extends Activity{
//友盟API
private UMShareAPI mShareAPI=null;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
inintView();
// dialog=new MyProgerssDialog(LoginActivity.this);
mShareAPI = UMShareAPI.get(this);
}
public void onClickAuth(View view) {
// TODO Auto-generated method stub
if (view.getId() == R.id.qq_register ){
platform = SHARE_MEDIA.QQ;
}else if (view.getId() == R.id.weiXin_register){
platform = SHARE_MEDIA.WEIXIN;
}
//授权成功
mShareAPI.doOauthVerify(LoginActivity.this, platform, wwumAuthListener);
}
private UMAuthListener wwumAuthListener = new UMAuthListener() {
@Override
public void onError(SHARE_MEDIA arg0, int arg1, Throwable arg2) {
// TODO Auto-generated method stub
Toast.makeText( getApplicationContext(), "授权失败", Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(SHARE_MEDIA arg0, int arg1, Map<String, String> arg2) {
// TODO Auto-generated method stubz
Toast.makeText(getApplicationContext(), "授权成功", Toast.LENGTH_SHORT).show();
//获取用户信息
mShareAPI.getPlatformInfo(LoginActivity.this, platform, umAuthListener);
}
@Override
public void onCancel(SHARE_MEDIA arg0, int arg1) {
// TODO Auto-generated method stub
Toast.makeText( getApplicationContext(), "授权失败", Toast.LENGTH_SHORT).show();
}
};
private UMAuthListener umAuthListener=new UMAuthListener() {
@Override
public void onError(SHARE_MEDIA arg0, int arg1, Throwable arg2) {
arg2.printStackTrace();
}
@Override
public void onComplete(SHARE_MEDIA arg0, int arg1, Map<String, String> arg2) {
if (arg2==null||arg2.size()<1) {
return;
}
Set<String> set=null;
try {
set = arg2.keySet();
} catch (Exception e) {
e.printStackTrace();
return;
}
//QQ登录
if(platform==SHARE_MEDIA.QQ){
String str=arg2.get("openid");
str=str.substring(0, 5);
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "username","WW_"+str );
// SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "username2","WW_"+str );
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "nickname", arg2.get("screen_name"));
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "sex", arg2.get("gender"));
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "hdimg", arg2.get("profile_image_url"));
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "address", arg2.get("province")+arg2.get("city"));
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "sign", "");
}
if(platform==SHARE_MEDIA.WEIXIN){
String str=arg2.get("openid");
str=str.substring(str.length()-5, str.length());
String strSex = arg2.get("sex");
if(strSex.equals("1")){
strSex="男";
}else{
strSex="女";
}
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "username","WW_"+ str);
// SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "username2","WW_"+ str);
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "nickname", arg2.get("nickname"));
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "sex", strSex);
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "hdimg", arg2.get("headimgurl"));
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "address", arg2.get("province")+arg2.get("city"));
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "sign", "");
}
myProgerssDialog = new MyProgerssDialog(LoginActivity.this);
myProgerssDialog.SetMessage("");
}
@Override
public void onCancel(SHARE_MEDIA arg0, int arg1) {
// TODO Auto-generated method stub
}
};
重写onActivityResult方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mShareAPI.onActivityResult(requestCode, resultCode, data);
}
}
以上就是友盟第三方登录的全过程,第三方登录代码没多少就是配置比较多。
QQ出现100044的问题:
答:这是因为QQ的签名包和自己的签名包不一致导致的,而且只有测试号才能进行登录。
微信无法登录:
答:微信需要自己生成一个keytool签名文件,然后打包成一份AKP,找到MD5的值,MD5值需要在微信后台保持一致,才能登录
注意:全公司用只用用一个签名文件,不管是谁生成的,一定要保存好。
注意:全公司用只用用一个签名文件,不管是谁生成的,一定要保存好。
注意:全公司用只用用一个签名文件,不管是谁生成的,一定要保存好。
重要的事情说三遍
安卓第三方友盟登录与分享相关推荐
- iOS 友盟登录和分享
新手可以来看下,如果有错误可以告诉我哈... 1. 集成友盟社会化组件流程 1. 1.1 注册友盟账号 登陆友盟官网,在我的产品页面添加新应用,然后获取到Appkey. 1.2 申请第三方账号 ...
- 微信 支付宝支付 友盟登录分享 统计
概述 GZPayAndShareDemo主要集成了支付宝 微信 支付功能,友盟社会化分享 统计!从此支付 分享 统计 不再是梦! 详细 代码下载:http://www.demodashi.com/de ...
- 友盟集成微信分享,显示您的设备没有安装微信问题及解决办法
问题描述: 友盟集成微信分享功能,当点击分享到微信好友和朋友圈时,提示:您的设备没有安装微信,但事实上我的手机上已经安装了微信. 解决办法: 查看官方文档:http://dev.umeng.com/s ...
- 友盟的社会化分享和第三方登录集成步骤
还是那句话,这种东西并不难,按照文档来,一遍不通就再读一遍,总能通的,我这里正好列一下要点及需要注意的地方,希望能够节约大家集成的时间:官方文档地址:友盟社会化分享及三方登录链接 1.到三方的开发平台 ...
- 友盟U-share sdk 分享的接入(支持Android及IOS)
导读:公司的原生开发的APP有块功能原来需要分享小程序到微信,现在改成分享成H5的形式,携带的参数不讨论,这里记录一下. 官方文档:https://developer.umeng.com/docs/1 ...
- 友盟调用新浪微博分享问题处理
问题回顾:调用新浪微博分享时,如果用户安装了微博客户端则会卡在授权页面,没有安装则通过webview正常分享,授权前加了那句代码之后分享正常. 1.acctionsheet的话应该在这里进行授权 - ...
- 【友盟】 微博分享缺少C8998文件
相信大家都知道 去微博查看 解决办法 1. 回调地址必须一致. 2.图片的Title跟内容必须填!!!!
- 友盟 推特分享错误
接入twitter后崩溃 libc++abi.dylib: terminating with uncaught exception of type NSException 2015-12-03 1 ...
- 3分钟,实现友盟第三方分享与登陆-- -一键分享
博客是作者近期实现第三方登陆.分享时的记录,采用的第三方平台是友盟社会化组件. 希望可以通过这个博客让读者快速集成好.并且实现第三方登陆.分享功能. (基本上Demo实现的功能) 众所周知,实 ...
最新文章
- SpringMVC源码分析(4)剖析DispatcherServlet重要组件
- C++/CLI思辨录之代理构造函数
- 【RHCA翻译计划】EX436第一章:集群存储概论2
- Linux进程间通信四 Posix 消息队列简介与示例
- C++ new和delete(C++动态分配和释放内存)
- (chap4 IP协议) IPV6(IP version 6)
- Linux虚拟网络设备之tun/tap
- mongodb 监控权限_分布式监控系统Zabbix3.4-针对MongoDB性能监控操作笔记
- 字符串连接符(Java)
- 近百个常用js代码汇总
- 今天发一个制作课工场论坛发帖
- reduceByKey中的加号是什么意思
- 通达信破底翻选股公式,用缠论底分型进行优化
- java 5,8,9章复习
- 02 固定效应模型与Stata实现
- ACFLY开源飞控的介绍
- loopy()代表什么意思,怎么用
- 谷歌地图街景图中可查看照片拍摄日期
- 基于嵌入式linux 的蓝牙通信系统设计与实现的研究意义,嵌入式Linux操作系统通信管理机的设计研究...
- 基于php的校园视频点播系统
热门文章
- Monolog php日志
- python查看函数消耗的内存_如何查看内存占用和运行速度
- java 模型驱动_(九)Struts2模型驱动和属性驱动
- 迷迭香精油功效及用法
- java redis缓存使用_redis缓存在项目中的使用
- JS1K 2013优胜作品公布 3D蜜蜂仅获亚军
- FreeSWITCH调用接口 监听 多方通话 强转 抢接等,FreeSWITCH电话会议(动态库和restful接口)...
- Minecraft 开服和 Linux 常用指令
- 一个网络主播,每个月能赚多少钱
- 中国联通奠定3G市场龙头地位