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

android 第三方平台登录与分享(基于Share SDK)

2014-09-08 11:10 525 查看
借助Share SDK开发:
1、获取Share SDK的appKey
a、在Share SDK官网注册
注册后创建应用,创建成功后就会获得Share SDK分配的appKey 和 App Secret

2、在我们的项目中注册开发者的信息

<?xml version="1.0" encoding="utf-8"?>
<DevInfor>
<!--说明:
1、表格中的第一项
<ShareSDK AppKey="api20" />是必须的,其中的AppKey是你在Share SDK上注册的开发者帐号的AppKey
2、所有集成到你项目的平台都应该为其在表格中填写相对应的开发者信息,
以新浪微博为例:
<SinaWeibo
SortId="此平台在分享列表中的位置,由开发者自行定义,可以是任何整型数字,数值越大越靠后"
AppKey="填写你在新浪微博上注册的AppKey"
AppSecret="填写你在新浪微博上注册到的AppKey"
Id="自定义字段,整形,用于你项目中对此平台的识别符"
RedirectUrl="填写你在新浪微博上注册的RedirectUrl" />
各个平台注册应用信息的地址如下:
新浪微博:http://open.weibo.com
腾讯微博:http://dev.t.qq.com
QQ空间:http://connect.qq.com/intro/login/
网易微博:http://open.t.163.com
搜狐微博:http://open.t.sohu.com
豆瓣:http://developers.douban.com
人人网:http://dev.renren.com
开心网:http://open.kaixin001.com Instapaper:http://www.instapaper.com/main/request_oauth_consumer_token
有道云笔记:http://note.youdao.com/open/developguide.html#app facebook:https://developers.facebook.com twitter:https://dev.twitter.com
搜狐随身看:https://open.sohu.com
QQ好友分享:http://mobile.qq.com/api/
微信:http://open.weixin.qq.com-->
<ShareSDK AppKey = "api20"/>
<!-- AppKey="104972cdd48" "23a9371d3a8"-->
<SinaWeibo
SortId="1"
AppKey="3201194191"
AppSecret="0334252914651e8f76bad63337b3b78f"
Id="1"
RedirectUrl="http://appgo.cn" />
<TencentWeibo
SortId="2"
AppKey="801307650"
AppSecret="ae36f4ee3946e1cbb98d6965b0b2ff5c"
RedirectUri="http://sharesdk.cn"
Id="2" />
<QZone
SortId="3"
AppId="100371282"
AppKey="aed9b0303e3ed1e27bae87c33761161d"
Id="3"
RedirectUrl="http://www.shareSDK.cn" />
<Renren
SortId="4"
AppId="226427"
ApiKey="fc5b8aed373c4c27a05b712acba0f8c3"
Id="4"
SecretKey="f29df781abdd4f49beca5a2194676ca4" />
</DevInfor>

3、mainfest注册第三方平台登录与分享的activity
登录:
<!--
为了授权操作可以顺利完成,需要在application下注册下面的Activity
AuthorizeActivity的路径是固定的,一定要在“cn.sharesdk.framework”下,因为他在Share-Core包中
-->
<activity
android:name="cn.sharesdk.framework.AuthorizeActivity"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize" >
</activity>
分享:
<!--
快捷分享是ShareSDK提供的一套基于其接口的GUI。通过简单的配置,可以在不考虑平台的情况下,调用很少的代码,就完成分享的操作。快捷分享的jar包放在SDK解压目录的"Libs\ShareSDK-GUI"中,叫做"cn.sharesdk.oneshare.jar"。快捷分享使用了两个Activity,需要在AndroidManifest.xml中注册这两个Activity:
-->
<activity
android:name="cn.sharesdk.onekeyshare.ShareAllGird"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="adjustPan|stateHidden" />
<activity
android:name="cn.sharesdk.onekeyshare.SharePage"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize" />
接着要导入ShareSDK和对应第三平台的SDK,导入libs

现在就可以开始编写程序代码了,在编写程序之前记得在oncreat里面得先调用
AbstractWeibo.initSDK(this);
初始化Share SDK
当程序被摧毁的时候,应该释放Share SDK的资源
protected void onDestroy() {
AbstractWeibo.stopSDK(this);
super.onDestroy();
}

第三方登录功能:
Share SDK 将很多第三平台集成在一起,然后每个平台都有自己平台的名字,并用枚举类型封装在一起,比如要用新浪微博的名字,就可以这样 :
SinaWeibo.NAME,
这个是方便后面注册平台时,要传入该平台的名字,如下
AbstractWeibo.getWeibo(this, name) 注册第三平台,name为平台的名称
该方法返回的是一个AbstractWeibo,也就是对应您注册的一个平台,接下来就可以对这个平台进行一些操作。
AbstractWeibo还有一个方法是AbstractWeibo.getWeiboList(Context context),该方法是获取已经注册到SDK的平台实例列表 此方法第一次调用会比较耗时,建议在子线程中调用

上面一步是注册平台,但是注册未必成功,比如您为申请成为该平台的开发者,也就是未获得该平台appkey等一些信息,这是注册就失败了,还有取消注册的一种情况,所以必须对注册这一个动作进行监听,Share SDK有专门的一个监听接口WeiboActionListener,继承该接口,有三个必须实现的抽象方法,也就是我所说的注册成功、失败、取消时回调的方法,注意,别忘记为平台添加监听weibo.setWeiboActionListener(this);
/**
* 授权成功的回调
* weibo - 回调的平台
*action - 操作的类型
*res - 请求的数据通过res返回
*/
@Override
public void onComplete(AbstractWeibo weibo, int action,HashMap<String, Object> res) {
Message msg = new Message();
msg.arg1 = 1;
msg.arg2 = action;
msg.obj = weibo;
handler.sendMessage(msg);

}

/**
* 授权失败的回调
*/
@Override
public void onError(AbstractWeibo weibo, int action, Throwable t) {
t.printStackTrace();

Message msg = new Message();
msg.arg1 = 2;
msg.arg2 = action;
msg.obj = weibo;
handler.sendMessage(msg);
}

/**
* 取消授权的回调
*/
@Override
public void onCancel(AbstractWeibo weibo, int action) {
Message msg = new Message();
msg.arg1 = 3;
msg.arg2 = action;
msg.obj = weibo;
handler.sendMessage(msg);
}

接着要对注册结果进行判断和执行相应的一些操作,上面是以消息的形式发送请求结果,所以直接对这个消息进行处理就ok了
比如在成功的时候,你想拿到您所注册平台账号的名字,
就可以调用AbstractWeibo.getDb().get(“nikname”);
getDb()是获取平台的数据库

分享功能:
首先就是注册分享界面的activity,上文已经提到了,这里不再解释。

Share SDK的快捷分享图文其实很简单,用起来很方便,但是这个分析的界面是不是您想要的,这另当别论。Share SDK实现了分享的功能
您只要写一个方法,在方法里面intent里跳到ShareAllGird.class就ok,ShareAllGird.class是Share SDK写好的一个activity,上文我们也注册过这个activity,而你想要分享的数据就可以放进这个intent里面了。当你要分享时调用这个方法就可以了
/**
* 使用快捷分享完成图文分享
*/
private void showGrid(boolean silent) {
Intent i = new Intent(this, ShareAllGird.class);
// 分享时Notification的图标
i.putExtra("notif_icon", R.drawable.ic_launcher);
// 分享时Notification的标题
i.putExtra("notif_title", this.getString(R.string.app_name));
// title标题,在印象笔记、邮箱、信息、微信(包括好友和朋友圈)、人人网和QQ空间使用,否则可以不提供
i.putExtra("title", this.getString(R.string.share));
// titleUrl是标题的网络链接,仅在人人网和QQ空间使用,否则可以不提供
i.putExtra("titleUrl", "http://sharesdk.cn");
// text是分享文本,所有平台都需要这个字段
i.putExtra("text", this.getString(R.string.share_content));
// imagePath是本地的图片路径,所有平台都支持这个字段,不提供,则表示不分享图片
i.putExtra("imagePath", MainActivity.TEST_IMAGE);
// url仅在微信(包括好友和朋友圈)中使用,否则可以不提供
i.putExtra("url", "http://sharesdk.cn");
// thumbPath是缩略图的本地路径,仅在微信(包括好友和朋友圈)中使用,否则可以不提供
i.putExtra("thumbPath", MainActivity.TEST_IMAGE);
// appPath是待分享应用程序的本地路劲,仅在微信(包括好友和朋友圈)中使用,否则可以不提供
i.putExtra("appPath", MainActivity.TEST_IMAGE);
// comment是我对这条分享的评论,仅在人人网和QQ空间使用,否则可以不提供
i.putExtra("comment", this.getString(R.string.share));
// site是分享此内容的网站名称,仅在QQ空间使用,否则可以不提供
i.putExtra("site", this.getString(R.string.app_name));
// siteUrl是分享此内容的网站地址,仅在QQ空间使用,否则可以不提供
i.putExtra("siteUrl", "http://sharesdk.cn");
// 是否直接分享
i.putExtra("silent", silent);
this.startActivity(i);}
本文在两个平台做了测试,新浪微博和腾讯QQ,微信平台好像要开发者资质认证,而且要一定的费用的。想对Share SDK想了解深入一点或具体一点可看博文http://www.apkbus.com/android-125666-1-1.html,本人也是基于此对Share SDK进一步了解的。
本人对Share SDK的分享界面也不喜欢,我想要的是像一般应用那样的分享效果,现在还在研究,希望大家多多指导。
本人是android的初学者,有什么不好的地方,望大家多多赐教,不胜感激!

借助Share SDK开发:
1、获取Share SDK的appKey
a、在Share SDK官网注册
注册后创建应用,创建成功后就会获得Share SDK分配的appKey 和 App Secret

2、在我们的项目中注册开发者的信息

<?xml version="1.0" encoding="utf-8"?>
<DevInfor>
<!--说明:
1、表格中的第一项
<ShareSDK AppKey="api20" />是必须的,其中的AppKey是你在Share SDK上注册的开发者帐号的AppKey
2、所有集成到你项目的平台都应该为其在表格中填写相对应的开发者信息,
以新浪微博为例:
<SinaWeibo
SortId="此平台在分享列表中的位置,由开发者自行定义,可以是任何整型数字,数值越大越靠后"
AppKey="填写你在新浪微博上注册的AppKey"
AppSecret="填写你在新浪微博上注册到的AppKey"
Id="自定义字段,整形,用于你项目中对此平台的识别符"
RedirectUrl="填写你在新浪微博上注册的RedirectUrl" />
各个平台注册应用信息的地址如下:
新浪微博:http://open.weibo.com
腾讯微博:http://dev.t.qq.com
QQ空间:http://connect.qq.com/intro/login/
网易微博:http://open.t.163.com
搜狐微博:http://open.t.sohu.com
豆瓣:http://developers.douban.com
人人网:http://dev.renren.com
开心网:http://open.kaixin001.com Instapaper:http://www.instapaper.com/main/request_oauth_consumer_token
有道云笔记:http://note.youdao.com/open/developguide.html#app facebook:https://developers.facebook.com twitter:https://dev.twitter.com
搜狐随身看:https://open.sohu.com
QQ好友分享:http://mobile.qq.com/api/
微信:http://open.weixin.qq.com-->
<ShareSDK AppKey = "api20"/>
<!-- AppKey="104972cdd48" "23a9371d3a8"-->
<SinaWeibo
SortId="1"
AppKey="3201194191"
AppSecret="0334252914651e8f76bad63337b3b78f"
Id="1"
RedirectUrl="http://appgo.cn" />
<TencentWeibo
SortId="2"
AppKey="801307650"
AppSecret="ae36f4ee3946e1cbb98d6965b0b2ff5c"
RedirectUri="http://sharesdk.cn"
Id="2" />
<QZone
SortId="3"
AppId="100371282"
AppKey="aed9b0303e3ed1e27bae87c33761161d"
Id="3"
RedirectUrl="http://www.shareSDK.cn" />
<Renren
SortId="4"
AppId="226427"
ApiKey="fc5b8aed373c4c27a05b712acba0f8c3"
Id="4"
SecretKey="f29df781abdd4f49beca5a2194676ca4" />
</DevInfor>

3、mainfest注册第三方平台登录与分享的activity
登录:
<!--
为了授权操作可以顺利完成,需要在application下注册下面的Activity
AuthorizeActivity的路径是固定的,一定要在“cn.sharesdk.framework”下,因为他在Share-Core包中
-->
<activity
android:name="cn.sharesdk.framework.AuthorizeActivity"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize" >
</activity>
分享:
<!--
快捷分享是ShareSDK提供的一套基于其接口的GUI。通过简单的配置,可以在不考虑平台的情况下,调用很少的代码,就完成分享的操作。快捷分享的jar包放在SDK解压目录的"Libs\ShareSDK-GUI"中,叫做"cn.sharesdk.oneshare.jar"。快捷分享使用了两个Activity,需要在AndroidManifest.xml中注册这两个Activity:
-->
<activity
android:name="cn.sharesdk.onekeyshare.ShareAllGird"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="adjustPan|stateHidden" />
<activity
android:name="cn.sharesdk.onekeyshare.SharePage"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize" />
接着要导入ShareSDK和对应第三平台的SDK,导入libs

现在就可以开始编写程序代码了,在编写程序之前记得在oncreat里面得先调用
AbstractWeibo.initSDK(this);
初始化Share SDK
当程序被摧毁的时候,应该释放Share SDK的资源
protected void onDestroy() {
AbstractWeibo.stopSDK(this);
super.onDestroy();
}

第三方登录功能:
Share SDK 将很多第三平台集成在一起,然后每个平台都有自己平台的名字,并用枚举类型封装在一起,比如要用新浪微博的名字,就可以这样 :
SinaWeibo.NAME,
这个是方便后面注册平台时,要传入该平台的名字,如下
AbstractWeibo.getWeibo(this, name) 注册第三平台,name为平台的名称
该方法返回的是一个AbstractWeibo,也就是对应您注册的一个平台,接下来就可以对这个平台进行一些操作。
AbstractWeibo还有一个方法是AbstractWeibo.getWeiboList(Context context),该方法是获取已经注册到SDK的平台实例列表 此方法第一次调用会比较耗时,建议在子线程中调用

上面一步是注册平台,但是注册未必成功,比如您为申请成为该平台的开发者,也就是未获得该平台appkey等一些信息,这是注册就失败了,还有取消注册的一种情况,所以必须对注册这一个动作进行监听,Share SDK有专门的一个监听接口WeiboActionListener,继承该接口,有三个必须实现的抽象方法,也就是我所说的注册成功、失败、取消时回调的方法,注意,别忘记为平台添加监听weibo.setWeiboActionListener(this);
/**
* 授权成功的回调
* weibo - 回调的平台
*action - 操作的类型
*res - 请求的数据通过res返回
*/
@Override
public void onComplete(AbstractWeibo weibo, int action,HashMap<String, Object> res) {
Message msg = new Message();
msg.arg1 = 1;
msg.arg2 = action;
msg.obj = weibo;
handler.sendMessage(msg);

}

/**
* 授权失败的回调
*/
@Override
public void onError(AbstractWeibo weibo, int action, Throwable t) {
t.printStackTrace();

Message msg = new Message();
msg.arg1 = 2;
msg.arg2 = action;
msg.obj = weibo;
handler.sendMessage(msg);
}

/**
* 取消授权的回调
*/
@Override
public void onCancel(AbstractWeibo weibo, int action) {
Message msg = new Message();
msg.arg1 = 3;
msg.arg2 = action;
msg.obj = weibo;
handler.sendMessage(msg);
}

接着要对注册结果进行判断和执行相应的一些操作,上面是以消息的形式发送请求结果,所以直接对这个消息进行处理就ok了
比如在成功的时候,你想拿到您所注册平台账号的名字,
就可以调用AbstractWeibo.getDb().get(“nikname”);
getDb()是获取平台的数据库

分享功能:
首先就是注册分享界面的activity,上文已经提到了,这里不再解释。

Share SDK的快捷分享图文其实很简单,用起来很方便,但是这个分析的界面是不是您想要的,这另当别论。Share SDK实现了分享的功能
您只要写一个方法,在方法里面intent里跳到ShareAllGird.class就ok,ShareAllGird.class是Share SDK写好的一个activity,上文我们也注册过这个activity,而你想要分享的数据就可以放进这个intent里面了。当你要分享时调用这个方法就可以了
/**
* 使用快捷分享完成图文分享
*/
private void showGrid(boolean silent) {
Intent i = new Intent(this, ShareAllGird.class);
// 分享时Notification的图标
i.putExtra("notif_icon", R.drawable.ic_launcher);
// 分享时Notification的标题
i.putExtra("notif_title", this.getString(R.string.app_name));
// title标题,在印象笔记、邮箱、信息、微信(包括好友和朋友圈)、人人网和QQ空间使用,否则可以不提供
i.putExtra("title", this.getString(R.string.share));
// titleUrl是标题的网络链接,仅在人人网和QQ空间使用,否则可以不提供
i.putExtra("titleUrl", "http://sharesdk.cn");
// text是分享文本,所有平台都需要这个字段
i.putExtra("text", this.getString(R.string.share_content));
// imagePath是本地的图片路径,所有平台都支持这个字段,不提供,则表示不分享图片
i.putExtra("imagePath", MainActivity.TEST_IMAGE);
// url仅在微信(包括好友和朋友圈)中使用,否则可以不提供
i.putExtra("url", "http://sharesdk.cn");
// thumbPath是缩略图的本地路径,仅在微信(包括好友和朋友圈)中使用,否则可以不提供
i.putExtra("thumbPath", MainActivity.TEST_IMAGE);
// appPath是待分享应用程序的本地路劲,仅在微信(包括好友和朋友圈)中使用,否则可以不提供
i.putExtra("appPath", MainActivity.TEST_IMAGE);
// comment是我对这条分享的评论,仅在人人网和QQ空间使用,否则可以不提供
i.putExtra("comment", this.getString(R.string.share));
// site是分享此内容的网站名称,仅在QQ空间使用,否则可以不提供
i.putExtra("site", this.getString(R.string.app_name));
// siteUrl是分享此内容的网站地址,仅在QQ空间使用,否则可以不提供
i.putExtra("siteUrl", "http://sharesdk.cn");
// 是否直接分享
i.putExtra("silent", silent);
this.startActivity(i);}
本文在两个平台做了测试,新浪微博和腾讯QQ,微信平台好像要开发者资质认证,而且要一定的费用的。想对Share SDK想了解深入一点或具体一点可看博文http://www.apkbus.com/android-125666-1-1.html,本人也是基于此对Share SDK进一步了解的。
本人对Share SDK的分享界面也不喜欢,我想要的是像一般应用那样的分享效果,现在还在研究,希望大家多多指导。
本人是android的初学者,有什么不好的地方,望大家多多赐教,不胜感激!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐