Android集成ShareSDK第三方分享和登录

本篇记录在Android平台上如何集成ShareSDK实现第三方登陆和分享,以及其中可能会遇到的坑。

Mob官网

下载

如图选择你需要分享的平台
这里写图片描述

集成

解压下载的文件,然后在ShareSDK for Android 里面打开到QuickIntegrater.jar(需要正确配置好Java环境变量),如图所示:

这里写图片描述

填入和你自己项目一致的项目名称和包名,之后点确定会生成一个如下图所示跟你填入项目文件同名的eclipse项目,我们需要将其集成到Android Studio里面。

这里写图片描述

在AS中,将assets文件复制到与main同级的目录,将res、libs所有文件复制到对应libs文件夹下,src里面cn与com开头的文件夹复制到与java目录下,最后在AS里面的整个工程目录如下所示:

这里写图片描述
到这里准备工作终于做完了 = =,其中重点是ShareSDK.xml文件,我们所有的平台的appid等都是在里面进行配置。这里不多说,官网有详细的介绍。我们开始在项目中,调用第三方分享和登录。

首先是第三方分享

首先初始化ShareSDk


public class MyApplication extends Application {
    
    

    @Override
    public void onCreate() {
        super.onCreate();
        ShareSDK.initSDK(this);
    }
}

权限配置和activity声明

<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.MANAGE_ACCOUNTS"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <!-- 蓝牙分享所需的权限 -->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

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

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

            <!-- 调用新浪原生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>

        </activity>
        <!--微信分享回调 -->
        <activity
            android:name=".wxapi.WXEntryActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait" />

选取自己需要的平台进行配置即可。

在需要的地方调用第三方分享

private void showShare() {
 OnekeyShare oks = new OnekeyShare();
 //关闭sso授权
 oks.disableSSOWhenAuthorize(); 
 // title标题,印象笔记、邮箱、信息、微信、人人网、QQ和QQ空间使用
 oks.setTitle("标题");
 // titleUrl是标题的网络链接,仅在Linked-in,QQ和QQ空间使用
 oks.setTitleUrl("http://sharesdk.cn");
 // text是分享文本,所有平台都需要这个字段
 oks.setText("我是分享文本");
 //分享网络图片,新浪微博分享网络图片需要通过审核后申请高级写入接口,否则请注释掉测试新浪微博
 oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");
 // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
 //oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片
 // url仅在微信(包括好友和朋友圈)中使用
 oks.setUrl("http://sharesdk.cn");
 // comment是我对这条分享的评论,仅在人人网和QQ空间使用
 oks.setComment("我是测试评论文本");
 // site是分享此内容的网站名称,仅在QQ空间使用
 oks.setSite("ShareSDK");
 // siteUrl是分享此内容的网站地址,仅在QQ空间使用
 oks.setSiteUrl("http://sharesdk.cn");

// 启动分享GUI
 oks.show(this);
 }

到这个地方,第三方分享基本就完成了。

第三方登陆

以QQ登陆为例



    private void login() {
        Platform platform = ShareSDK.getPlatform(this, QQ.NAME);
        // 如果用户已经授权过
        if (platform.isAuthValid()) {
            // 进行登录操作
            Toast.makeText(this, "已经登录过了", Toast.LENGTH_SHORT).show();
            return;
        }

        platform.setPlatformActionListener(new PlatformActionListener() {

            @Override
            public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
                // 进行登录操作,要进行UI操作,请回调至主线程
                // 获取昵称
                   String nickname = obj.get("nickname").toString();
                // 获取用户头像
                String icon = obj.get("figureurl_qq_1").toString();
            }

            @Override
            public void onError(Platform platform, int i, Throwable throwable) {
                // 如果授权错误清楚授权缓存的信息
                platform.removeAccount(true);
            }

            @Override
            public void onCancel(Platform platform, int i) {

            }
        });
        // 开启SSO授权,如QQ登录,当手机有QQ应用时,先从客户端申请授权,无则网页授权
        // false标识开启SSO授权
        platform.SSOSetting(false);
        platform.showUser(null);
        // 请求授权
        platform.authorize();
    }

这里需要注意的是,登录的监听回调都不是主线程,所以如果有UI操作,我们要将其回调到主线程中去操作。如果要从其他的平台登录只需要修改对应的平台名称即可。如需清除授权,退出登录操作调用platform.removeAccount(true)即可。

到这里第三方登录与分享基本就已经完成了,第三方的东西本来就是为了让开发人员用着简单,所有开发文档就是最后的学习资料。最后打包的时候可能会报错,我们还需要在build.gradle里面加入:

    lintOptions{
        checkReleaseBuilds false
        abortOnError false
    }

更多详细的资料,请访问 官网

猜你喜欢

转载自blog.csdn.net/Leavessilent/article/details/58597478