您的位置:首页 > 其它

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

2016-09-23 17:36 369 查看
第一次写博客有写的不好的地方,请大家见谅,我会尽量写得更加细节

在初学这中实现第三方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值需要在微信后台保持一致,才能登录
注意:全公司用只用用一个签名文件,不管是谁生成的,一定要保存好。
注意:全公司用只用用一个签名文件,不管是谁生成的,一定要保存好。

注意:全公司用只用用一个签名文件,不管是谁生成的,一定要保存好。
重要的事情说三遍
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: