安卓第三方友盟登录与分享

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

在初学这中实现第三方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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值