您的位置:首页 > 移动开发 > Android开发

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

2017-02-28 15:04 417 查看
本篇记录在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
}


更多详细的资料,请访问 官网
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息