第一次写博客有写的不好的地方,请大家见谅,我会尽量写得更加细节

在初学这中实现第三方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值需要在微信后台保持一致,才能登录

注意:全公司用只用用一个签名文件,不管是谁生成的,一定要保存好。

注意:全公司用只用用一个签名文件,不管是谁生成的,一定要保存好。

注意:全公司用只用用一个签名文件,不管是谁生成的,一定要保存好。

重要的事情说三遍

安卓第三方友盟登录与分享相关推荐

  1. iOS 友盟登录和分享

    新手可以来看下,如果有错误可以告诉我哈... 1.  集成友盟社会化组件流程 1. 1.1  注册友盟账号 登陆友盟官网,在我的产品页面添加新应用,然后获取到Appkey. 1.2  申请第三方账号 ...

  2. 微信 支付宝支付 友盟登录分享 统计

    概述 GZPayAndShareDemo主要集成了支付宝 微信 支付功能,友盟社会化分享 统计!从此支付 分享 统计 不再是梦! 详细 代码下载:http://www.demodashi.com/de ...

  3. 友盟集成微信分享,显示您的设备没有安装微信问题及解决办法

    问题描述: 友盟集成微信分享功能,当点击分享到微信好友和朋友圈时,提示:您的设备没有安装微信,但事实上我的手机上已经安装了微信. 解决办法: 查看官方文档:http://dev.umeng.com/s ...

  4. 友盟的社会化分享和第三方登录集成步骤

    还是那句话,这种东西并不难,按照文档来,一遍不通就再读一遍,总能通的,我这里正好列一下要点及需要注意的地方,希望能够节约大家集成的时间:官方文档地址:友盟社会化分享及三方登录链接 1.到三方的开发平台 ...

  5. 友盟U-share sdk 分享的接入(支持Android及IOS)

    导读:公司的原生开发的APP有块功能原来需要分享小程序到微信,现在改成分享成H5的形式,携带的参数不讨论,这里记录一下. 官方文档:https://developer.umeng.com/docs/1 ...

  6. 友盟调用新浪微博分享问题处理

    问题回顾:调用新浪微博分享时,如果用户安装了微博客户端则会卡在授权页面,没有安装则通过webview正常分享,授权前加了那句代码之后分享正常. 1.acctionsheet的话应该在这里进行授权 - ...

  7. 【友盟】 微博分享缺少C8998文件

    相信大家都知道   去微博查看 解决办法 1. 回调地址必须一致. 2.图片的Title跟内容必须填!!!!

  8. 友盟 推特分享错误

    接入twitter后崩溃   libc++abi.dylib: terminating with uncaught exception of type NSException 2015-12-03 1 ...

  9. 3分钟,实现友盟第三方分享与登陆-- -一键分享

    博客是作者近期实现第三方登陆.分享时的记录,采用的第三方平台是友盟社会化组件. 希望可以通过这个博客让读者快速集成好.并且实现第三方登陆.分享功能.     (基本上Demo实现的功能) 众所周知,实 ...

最新文章

  1. SpringMVC源码分析(4)剖析DispatcherServlet重要组件
  2. C++/CLI思辨录之代理构造函数
  3. 【RHCA翻译计划】EX436第一章:集群存储概论2
  4. Linux进程间通信四 Posix 消息队列简介与示例
  5. C++ new和delete(C++动态分配和释放内存)
  6. (chap4 IP协议) IPV6(IP version 6)
  7. Linux虚拟网络设备之tun/tap
  8. mongodb 监控权限_分布式监控系统Zabbix3.4-针对MongoDB性能监控操作笔记
  9. 字符串连接符(Java)
  10. 近百个常用js代码汇总
  11. 今天发一个制作课工场论坛发帖
  12. reduceByKey中的加号是什么意思
  13. 通达信破底翻选股公式,用缠论底分型进行优化
  14. java 5,8,9章复习
  15. 02 固定效应模型与Stata实现
  16. ACFLY开源飞控的介绍
  17. loopy()代表什么意思,怎么用
  18. 谷歌地图街景图中可查看照片拍摄日期
  19. 基于嵌入式linux 的蓝牙通信系统设计与实现的研究意义,嵌入式Linux操作系统通信管理机的设计研究...
  20. 基于php的校园视频点播系统

热门文章

  1. Monolog php日志
  2. python查看函数消耗的内存_如何查看内存占用和运行速度
  3. java 模型驱动_(九)Struts2模型驱动和属性驱动
  4. 迷迭香精油功效及用法
  5. java redis缓存使用_redis缓存在项目中的使用
  6. JS1K 2013优胜作品公布 3D蜜蜂仅获亚军
  7. FreeSWITCH调用接口 监听 多方通话 强转 抢接等,FreeSWITCH电话会议(动态库和restful接口)...
  8. Minecraft 开服和 Linux 常用指令
  9. 一个网络主播,每个月能赚多少钱
  10. 中国联通奠定3G市场龙头地位