一、前面部分引用官方文档,按步骤添加ShareSDK到自己的项目中
1. 获取ShareSDK的AppKey
2. 下载SDK
下载页如图所示:
点击下载之后如下图所以,点击下载SDK的下载页,展开平台可以选择其他的第三方平台;demo也是这里下载;
下载完之后的解压目录如图所示:
3. 快速集成
ShareSDK深受大家喜爱,看下亲爱的用户做的详细说明:Studio集成
第一步:使快速工具进行集成(查看视频教程)
进入ShareSDK解压目录,打开“Share SDK for Android”目录,可以找到“QuickIntegrater.jar”,这个就是快速集成ShareSDK的工具
Windows下
首先确定您已经安装了JDK,并且正确配置了JAVA_HOME和PATH系统变量,此时您可以双击QuickIntegrater启动程序
Linux/Mac OS下
同样需要先确保已经正确配置了JDK,之后启动终端,cd进入“Share SDK for Android”目录,输入: Java -jar QuickIntegrater.jar 可启动QuickIntegrater
正确输入项目的名称和包名,勾选需要的集成的平台,然后点击“确定”。
QuickIntegrater会自行产生一个文件夹,复制此文件夹中所有文件到您的项目中覆盖即可。
第二步:配置AndroidManifest.xml(查看视频教程)
下面清单文件的配置是全部的,没有的平台就是不需要配置
1、添加权限
1
2
3
4
5
6
7
8
9
10
11
12
|
<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" />
|
2、添加activity信息
(注意: tencent后面的appid要保持和您配置的QQ的appid一致)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<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>
<dataandroid:scheme="tencent100371282"/>
<actionandroid:name="android.intent.action.VIEW"/>
<categoryandroid:name="android.intent.category.BROWSABLE"/>
<categoryandroid:name="android.intent.category.DEFAULT"/>
</intent-filter>
<!--调用新浪原生SDK,需要注册的回调activity-->
<intent-filter>
<actionandroid:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY"/>
<categoryandroid:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
|
3、如果您集成了微信,易信,新浪微博支付宝还需要添加下面回调的activity处理;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<!--微信分享回调 -->
<activity
android:name=".wxapi.WXEntryActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait" />
<!--易信分享回调 -->
<activity
android:name=".yxapi.YXEntryActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait" />
<!-- 支付宝分享回调 -->
<activity
android:name=".apshare.ShareEntryActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"/>
|
4、替换mob后台申请的Appkey与各个平台申请的key
第三步:添加分享代码(查看视频教程)
在您的代码中调用此方法,即可打开一键分享功能进行分享
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
privatevoidshowShare(){
ShareSDK.initSDK(this);
OnekeyShareoks=newOnekeyShare();
//关闭sso授权
oks.disableSSOWhenAuthorize();
// 分享时Notification的图标和文字 2.5.9以后的版本不调用此方法
//oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
// title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
oks.setTitle(getString(R.string.share));
// titleUrl是标题的网络链接,仅在人人网和QQ空间使用
oks.setTitleUrl("http://sharesdk.cn");
// text是分享文本,所有平台都需要这个字段
oks.setText("我是分享文本");
// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
//oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片
// url仅在微信(包括好友和朋友圈)中使用
oks.setUrl("http://sharesdk.cn");
// comment是我对这条分享的评论,仅在人人网和QQ空间使用
oks.setComment("我是测试评论文本");
// site是分享此内容的网站名称,仅在QQ空间使用
oks.setSite(getString(R.string.app_name));
// siteUrl是分享此内容的网站地址,仅在QQ空间使用
oks.setSiteUrl("http://sharesdk.cn");
// 启动分享GUI
oks.show(this);
}
|
二、第三方登录实现
在步骤一完成后进行如下操作
[java] view plain copy
- //1.威信的
- //微信登录
- //测试时,需要打包签名;sample测试时,用项目里面的demokey.keystore
- //打包签名apk,然后才能产生微信的登录
- //Platform wechat = ShareSDK.getPlatform(Wechat.NAME);
- //authorize(wechat);
- //2.新浪微博
- //新浪微博
- Platform sina = ShareSDK.getPlatform(SinaWeibo.NAME);
- authorize(sina);
[java] view plain copy
- //执行授权,获取用户信息
- //文档:http://wiki.mob.com/Android_%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E8%B5%84%E6%96%99
- private void authorize(Platform plat) {
- if (plat == null) {
- //popupOthers();
- return;
- }
- plat.setPlatformActionListener(this);
- //关闭SSO授权
- plat.SSOSetting(true);
- plat.showUser(null);
- }
[java] view plain copy
- @Override
- public void onCancel(Platform platform, int action) {
- // TODO Auto-generated method stub
- if (action == Platform.ACTION_USER_INFOR) {
- handler.sendEmptyMessage(MSG_AUTH_CANCEL);
- }
- }
- @Override
- public void onComplete(Platform platform, int action,
- HashMap<String, Object> res) {
- // TODO Auto-generated method stub
- if (action == Platform.ACTION_USER_INFOR) {
- Message msg = new Message();
- msg.what = MSG_AUTH_COMPLETE;
- msg.obj = new Object[] {platform.getName(), res};
- handler.sendMessage(msg);
- }
- }
- @Override
- public void onError(Platform arg0, int action, Throwable t) {
- // TODO Auto-generated method stub
- if (action == Platform.ACTION_USER_INFOR) {
- handler.sendEmptyMessage(MSG_AUTH_ERROR);
- }
- t.printStackTrace();
- }
在Oncreat中初始化一个handler :handler = new Handler(this);
实现方法:
[java] view plain copy
- @SuppressWarnings("unchecked")
- public boolean handleMessage(Message msg) {
- switch(msg.what) {
- case MSG_AUTH_CANCEL: {
- //取消授权
- Toast.makeText(NewsDetailActivity.this, R.string.auth_cancel, Toast.LENGTH_SHORT).show();
- } break;
- case MSG_AUTH_ERROR: {
- //授权失败
- Toast.makeText(NewsDetailActivity.this, R.string.auth_error, Toast.LENGTH_SHORT).show();
- } break;
- case MSG_AUTH_COMPLETE: {
- //授权成功
- Toast.makeText(NewsDetailActivity.this, R.string.auth_complete, Toast.LENGTH_LONG).show();
- Object[] objs = (Object[]) msg.obj;
- String platform = (String) objs[0];
- HashMap<String, Object> res = (HashMap<String, Object>) objs[1];
- // if (signupListener != null && signupListener.onSignin(platform, res)) {
- // SignupPage signupPage = new SignupPage();
- // signupPage.setOnLoginListener(signupListener);
- // signupPage.setPlatform(platform);
- // signupPage.show(activity, null);
- // }
- doLogined(platform);
- } break;
- case MSG_SMSSDK_CALLBACK:
- //{
- // if (msg.arg2 == SMSSDK.RESULT_ERROR) {
- // Toast.makeText(activity, "操作失败", Toast.LENGTH_SHORT).show();
- // } else {
- // switch (msg.arg1) {
- // case SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE: {
- // if(msgLoginDlg != null && msgLoginDlg.isShowing()){
- // msgLoginDlg.dismiss();
- // }
- // Toast.makeText(activity, "提交验证码成功", Toast.LENGTH_SHORT).show();
- // Message m = new Message();
- // m.what = MSG_AUTH_COMPLETE;
- // m.obj = new Object[] {"SMSSDK", (HashMap<String, Object>) msg.obj};
- // handler.sendMessage(m);
- // } break;
- // case SMSSDK.EVENT_GET_VERIFICATION_CODE:{
- // Toast.makeText(activity, "验证码已经发送", Toast.LENGTH_SHORT).show();
- // } break;
- // }
- // }
- //}
- break;
- }
- return false;
- }
[java] view plain copy
- private void doLogined(String platform) {
- // TODO Auto-generated method stub
- mPlatform=ShareSDK.getPlatform(platform);
- String gender = "";
- if(platform != null){
- gender = mPlatform.getDb().getUserGender();
- if(gender.equals("m")){
- // userInfo.setUserGender(UserInfo.Gender.BOY);
- gender = "男";
- }else{
- //userInfo.setUserGender(UserInfo.Gender.GIRL);
- gender = "女";
- }
- // userInfo.setUserIcon(platform.getDb().getUserIcon());
- // userInfo.setUserName(platform.getDb().getUserName());
- // userInfo.setUserNote(platform.getDb().getUserId());
- Toast.makeText(getApplicationContext(), gender+"/"+mPlatform.getDb().getUserName()+"/"+mPlatform.getDb().getUserId(), 4000).show();
- }
- // tvUserName.setText(userInfo.getUserName());
- // tvUserGender.setText(gender);
- // tvUserNote.setText("USER ID : " + userInfo.getUserNote());
- }
至此,即可获得用户信息。