27
2017
09

ShareSDK 第三方登录 Android

在Android 应用中使用第三方登录是比较常见的,最常用的就是微信,qq,新浪微博。第三方登录就可以借助第三方的工具ShareSDK,下面是第三方登录集成ShareSDK的使用。(3.0.2版本)

首先在 ShareSDK官网 下载SDK。

然后根据 官方文档 来集成使用。

打开所下载的 ShareSDK for Android 目录中的 QuickIntegrater.jar ,选择自己想要使用的平台。包名为自己应用的包名,如下:

这里写图片描述

点击确定之后再 ShareSDK for Android 目录下会生成 Sample 这个项目。将其复制到自己的项目中并覆盖。

配置Android Manifest.xml

<!-- 添加必要的权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

<activity  android:name="com.mob.tools.MobUIShell" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:windowSoftInputMode="stateHidden|adjustResize" >

    <!-- 调用新浪原生SDK,需要注册的回调activity -->
    <intent-filter>
        <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

    <!--集成line客户端登录授权,需要添如下格式的过滤器-->
    <intent-filter> 
    <data android:scheme="line.1477692153" />
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

<!-- ShareSDK3.1.0版本之前才需要在MobUIShell下面注册此意图,3.1.0版本之后(包含3.1.0)不需要注册此intent-->
    <intent-filter>
        <data android:scheme="tencent100371282" /> 
        <action android:name="android.intent.action.VIEW" /> 
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity>
<!-- 填写您从Mob开发者后台中得到的Appkey和AppSecret -->
<meta-data android:name="Mob-AppKey" android:value="您的AppKey"/>
<meta-data android:name="Mob-AppSecret" android:value="您的AppSecret"/>
AppKey和AppSecret需要在Mob后台创建应用,之后会生成AppKey和AppSecret,并将其填入meta-data中。

这里写图片描述

还有微信在清单文件中的注册。
<activity android:name=".wxapi.WXEntryActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" />
官方文档推荐  以MobApplication作为项目Application 
<application  android:name="com.mob.MobApplication"></application>
里边做了MobSDK的初始化工作。也可以自定义 Application ,并做初始化工作。
public class App extends Application {
    protected String getAppkey() {
        return null;
    }

    protected String getAppSecret() {
        return null;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        MobSDK.init(this, this.getAppkey(), this.getAppSecret());
    }
}
当然别忘了在 application 中注册<application  android:name=".App"></application>

配置完成,接下来就可以书写登录的逻辑了。

布局文件,很简单,3个button。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >
            <Button  android:id="@+id/btn_qq_login" android:layout_width="match_parent" android:layout_height="50dp" android:text="QQ" />
            <Button  android:id="@+id/btn_wechat_login" android:layout_width="match_parent" android:layout_height="50dp" android:text="微信" />
            <Button  android:id="@+id/btn_sina_login" android:layout_width="match_parent" android:layout_height="50dp" android:text="新浪" />
</LinearLayout>
MainActivity中代码。
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

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

        Button mbtn_qq_login = (Button) findViewById(R.id.btn_qq_login);
        Button mbtn_wechat_login = (Button) findViewById(R.id.btn_wechat_login);
        Button mbtn_sina_login = (Button) findViewById(R.id.btn_sina_login);

        mbtn_qq_login.setOnClickListener(this);
        mbtn_wechat_login.setOnClickListener(this);
        mbtn_sina_login.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btn_qq_login:
                loginSina(QQ.NAME);
                break;
            case R.id.btn_wechat_login:
                loginSina(Wechat.NAME);
                break;
            case R.id.btn_sina_login:
                loginSina(SinaWeibo.NAME);
                break;
            default:
                break;
        }
    }

    private static final String TAG = "MainActivity";

    private void loginSina(String s) {
        Platform platform = ShareSDK.getPlatform(s);
        //回调信息,可以在这里获取基本的授权返回的信息,但是注意如果做提示和UI操作要传到主线程handler里去执行
        platform.setPlatformActionListener(new PlatformActionListener() {

            @Override
            public void onError(Platform arg0, int arg1, Throwable arg2) {
                // TODO Auto-generated method stub
                arg2.printStackTrace();
                Log.e(TAG, "123");
            }

            @Override
            public void onComplete(Platform platform, int action, HashMap<String, Object> arg2) {
                // TODO Auto-generated method stub
                //输出所有授权信息
                long loginTime = System.currentTimeMillis();
                //用户资源都保存到res
                //通过打印res数据看看有哪些数据是你想要的
                PlatformDb platDB = platform.getDb();//获取数平台数据DB
                //通过DB获取各种数据
                String token = platDB.getToken();
                String userGender = platDB.getUserGender();
                String userIcon = platDB.getUserIcon();
                String userId = platDB.getUserId();
                String userName = platDB.getUserName();
                Log.e(TAG,"token----"+token+"\n性别----"+userGender+",\n图标----"+userIcon+"\nid----"+userId+"\n名字-----"+userName);
            }

            @Override
            public void onCancel(Platform arg0, int arg1) {
                // TODO Auto-generated method stub

            }
        });
        platform.showUser(null);
        platform.removeAccount(true);
    }
}

当然这个时候运行程序点击是没有效果的。

QQ

qq需要在 腾讯开放平台 去创建应用的,并将APP ID 和 APP KEY 填入 ShareSDK.xml 中对应的位置。
这里写图片描述

微博

微博需要在 微博开放平台创建应用,并将APP ID 和 APP KEY 填入 ShareSDK.xml 中对应的位置。
这里写图片描述
RedirectUrl 需要填写为微博登录的回调 https://api.weibo.com/oauth2/default.html
微博开放平台中包名填写需和项目中的包名一致,并使用 签名工具 得到当前应用的签名。
在高级信息中也需要填入回调url。
这里写图片描述

微信

微信需要在微信开放平台创建应用,并将APP ID 和 APP KEY 填入 ShareSDK.xml 中对应的位置。
微信开放平台中包名填写需和项目中的包名一致,并使用 签名工具 得到当前应用的签名。
这里写图片描述

有了这些还是不够的,若想获得微信登录的功能,还要通过腾讯公司的审核,1年需缴纳300元。成功之后才可以使用微信登录。

下面我们运行项目,如图,

这里写图片描述

点击QQ按钮。则会跳转登录。

这里写图片描述

点击登录按钮,则跳回主界面,打印出了用户信息,登陆成功。log信息如下:

这里写图片描述

点击新浪按钮。跳转到新浪微博登录界面。

这里写图片描述

点击确定按钮,跳回主界面,打印出用户信息,登陆成功。log信息如下:

这里写图片描述

微信登录需要审核付费之后才可以使用,这里我们就不做演示了。原理类似。
以上就是ShareSDK 第三方登录的使用,如有错误请指出,谢谢!
上一篇:Xlistview 应用 下一篇:Swift Label计算高度