Android集成友盟实现QQ、微信、微博登录

本人从事android工作不长,是一个小白,在公司写项目时也遇到很多问题,自己也瞎折腾了很长时间,有很多不懂的我都在网上寻找答案,很多的是CSDN上博主发布的文章,解决了我在开发中遇到的很多问题。一段时间公司的一个商城项目要集成微信登录,之前在网上找过写android的第三方登录的集成文章,但是代码量有些大,对于我有些看的不是太懂,后来有人推荐友盟的第三方登录,当时工作时任务不是很多就上去看了看,自己也做了下集成,当时做的是qq、微博的第三方登录,只是微博的有些坑,需要注意下。公司项目的微信登录用的就是友盟的,代码不多,非常容易理解,集成起来也比较容易。

不知不觉废话连篇,现在说下正题,我为什么要写这篇文章,CSDN解决了我不少问题,我写这篇文章一是想温习一下,做下记录,以后用起来不至于重新看官方文档,二是想做下分享,希望可以帮到需要的人,当然大神很多,我写这篇文章只是为了分享,为了可以用到他的小伙伴带来帮助。

废话不多说我们再次步入正题:

1、申请友盟AppKey:

首先我们进入友盟官网创建一个项目获取AppKey,这个需要集成在我们的android项目中去

2、集成SDK:

然后进入友盟官网的开发者中心-SDK下载,勾住社会化分享SDK,点击右下方的下载,获取到SDK资源包

引入文件夹下的\Android\share\share_android_6.9.3\main\res路径下的res文件夹下的所有资源文件,

引入文件夹下的\Android\common\common_android_1.5.4\normal文件夹中的jar包,

引入文件夹下的\Android\share\share_android_6.9.3\main\libs文件夹中的jar包,

引入文件夹下的\Android\share\share_android_6.9.3\platforms文件夹中的jar包。

3、第三方平台注册应用:

在QQ、微信、微博这个开放平台上注册应用获取到APP ID等相关需要用到的参数

QQ第三方登录需要用到开放平台应用的APP ID和APP KEY,

微信第三方登录需要用到开放平台应用的APP ID和APP Secret,

微博第三方登录需要用到开放平台应用的APP KEY和APP Secret,还有应用信息高级信息中授权回调页的地址,这里的授权回调页地址要和取消授权回调页一致,并且要和项目中设置的保持一致并且不能为空。

4、项目中相关配置:

(1)权限

<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"/>

(2)build.gradle 模块文件中修改

buildTypes {
        release {
            ..
            signingConfig signingConfigs.debug
            ..
        }
    }

(3)AndroidManifest文件中加入

<meta-data
        android:name="umeng_appkey"
        android:value="友盟appkey">
</meta-data>
<!--微博-->

<activity
            android:name="com.umeng.socialize.media.WBShareCallBackActivity"
            android:configChanges="keyboardHidden|orientation"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:exported="false"
            >
        </activity>
        <activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
            android:configChanges="keyboardHidden|orientation"
            android:exported="false"
            android:windowSoftInputMode="adjustResize"
            >

        </activity>
        <activity
            android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
            android:launchMode="singleTask"
            android:name="com.sina.weibo.sdk.share.WbShareTransActivity">
            <intent-filter>
                <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <!--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="tencent腾讯开放平台应用的appid" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="orientation|keyboardHidden|screenSize"/>
        <!--wechat-->
        <activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

(4)微信登录的回调类

public class WXEntryActivity extends WXCallbackActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wxentry);
    }
}

 

5、代码集成

这里先贴出官方的文档:https://developer.umeng.com/docs/66632/detail/66639

(1)自定义Application中

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //初始化接口
        UMConfigure.init(this,"友盟appkey","umeng", UMConfigure.DEVICE_TYPE_PHONE,"");
        PlatformConfig.setWeixin("开放平台APPID", "开放平台APPSecret");
        PlatformConfig.setSinaWeibo("开放平台APPKEY", "开放平台APPSecret","http://sns.whalecloud.com");//第三个参数为授权回调页的地址
        PlatformConfig.setQQZone("开放平台APPID", "开放平台APPKey");
        //..
    }
}

(2)log开关,动态权限,activity创建时加入

 UMConfigure.setLogEnabled(true);//设置组件化的Log开关,参数: boolean 默认为false,如需查看LOG设置为true
        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.READ_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);
        }

(3)再点击按钮时触发授权方法,这里是使用QQ登录授权,微信和微博的和这里类似就不贴出来了

SHARE_MEDIA platform = SHARE_MEDIA.QQ;//QQ授权
UMShareAPI.get(this).doOauthVerify(this, platform, authListener);// UMShareAPI.get(this)在类上声明会报错

//这里有个坑当时整了好久,UMShareAPI.get(this)在类上声明会报错,加在方法中可以调用

(4)回调方法

@Override//回调
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
    }

(5)authListener授权监听器

UMAuthListener authListener = new UMAuthListener() {//umAuthListener为授权回调
        @Override public void onStart(SHARE_MEDIA platform) { }//授权开始的回调,platform 平台名称
        @Override//授权成功的回调/platform 平台名称/action 行为序号,开发者用不上/data 用户资料返回
        public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
            Toast.makeText(mContext, "成功了", Toast.LENGTH_LONG).show();
            //Log.e("debug",platform.getName());
            if (platform.getName().equals("qq")){
                Log.e("debug","准备获取qq用户信息!");
                UMShareAPI.get(getApplicationContext()).getPlatformInfo(LoginActivity.this, SHARE_MEDIA.QQ, new UMAuthListener() {//获取用户资料
                    @Override
                    public void onStart(SHARE_MEDIA share_media) { }
                    @Override
                    public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
                         //之后想要的用户信息就在这个map集合中,从中获取你想要的,我们在实际开发中需要在这里获取一个openId之类的参数,然后交给后台的小哥哥就可以了,我们再与后台交接接口就可以了
                    }
                    @Override public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) { }
                    @Override public void onCancel(SHARE_MEDIA share_media, int i) { }
                });
            }else{
                //其他的第三方登录授权回调
            }
        }
        @Override //授权失败的回调platform 平台名称action 行为序号,开发者用不上 t 错误原因
        public void onError(SHARE_MEDIA platform, int action, Throwable t) {
            Toast.makeText(mContext, "失败:" + t.getMessage(),Toast.LENGTH_LONG).show();
        }
        @Override//授权取消的回调、platform 平台名称、行为序号,开发者用不上
        public void onCancel(SHARE_MEDIA platform, int action) {
            Toast.makeText(mContext, "取消了", Toast.LENGTH_LONG).show();
        }
    };

这篇文章就写到这里吧,这是我写的第一篇文章,希望对大家们有需要的人给予帮助,如果有什么其他问题小伙伴可以在官网上自行查找下,有什么地方有异议可以在评论里点出,第一次写文章,可能写的不太好,有什么不足欢迎小伙伴的评论,当然这篇文章是为了分享给大家希望带来帮助,不喜勿喷!还有,这篇文章是博主的第一次原创,转载请表明出处哦,谢谢!

 

 

       

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值