Facebook 登录和分享 分类: Android开发常识
来源:互联网 发布:足球战术软件 编辑:程序博客网 时间:2024/05/21 08:40
注意此处的hashKey 对你程序能登录和分享成功有很大关系 有两种获取方法 代码和cmd
代码
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.baidu.pushtest",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String KeyHash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
Log.d("KeyHash:", "KeyHash:"+KeyHash);//两次获取的不一样 此处取第一个的值
Toast.makeText(this, "FaceBook HashKey:"+KeyHash, Toast.LENGTH_SHORT).show();
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
CMD
获取哈希值的方法:
下载 openssl-0.9.8k_WIN32 下载地址:http://download.csdn.net/detail/h7870181/5054864
或者直接本文最下面附件中下载
下载完成后,解压到C盘根目录
进入cmd 粘贴以下字符串,keystore默认密码为android 注意不要写错了。出来一串字符则为我们所需要的哈希值。
keytool -export -alias myAlias -keystore C:\Users\Administrator\.android\debug.keystore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
填写完之后就是下载SDK了
官网可以下载,可怜的我连接的VPN不能下载,只能到git上面去找了:https://github.com/facebook/facebook-android-sdk
下载解压之后
facebook需要导入项目用作libs samples是官方Demo 加入libs下的两个jar包
自行导入修改应该是没有问题的 如有问题就是jar包导错了,自行看问题解决问题
2.ok此时我们可以往自己项目中加入libs 并Coding了
public class FaceBookTest extends Activity implements OnClickListener{
private Button m_face_login;
private Button m_face_share;
private Button m_face_login_out;
private UiLifecycleHelper uiHelper;
private Session.StatusCallback statusCallback = new SessionStatusCallback();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.face);
uiHelper = new UiLifecycleHelper(this, callback);
uiHelper.onCreate(savedInstanceState);
initlayout();
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.baidu.pushtest",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String KeyHash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
Log.d("KeyHash:", "KeyHash:"+KeyHash);//两次获取的不一样 此处取第一个的值
Toast.makeText(this, "FaceBook HashKey:"+KeyHash, Toast.LENGTH_SHORT).show();
// Toast.makeText(this, "FaceBook HashKey:"+Base64.encodeToString(md.digest(), Base64.DEFAULT), Toast.LENGTH_SHORT).show();
// System.out.println("KeyHash:"+Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
}
private void initlayout(){
m_face_login = (Button) this.findViewById(R.id.face_login);
m_face_share = (Button) this.findViewById(R.id.face_share);
m_face_login_out = (Button) this.findViewById(R.id.face_login_out);
m_face_login.setOnClickListener(this);
m_face_share.setOnClickListener(this);
m_face_login_out.setOnClickListener(this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Session.getActiveSession().onActivityResult(this, requestCode,resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() {
@Override
public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) {
Log.e("Activity", String.format("Error: %s", error.toString()));
}
@Override
public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) {
Log.i("Activity", "Success!");
String result = data.getString("com.facebook.platform.extra.COMPLETION_GESTURE");//cancel取消 post成功
// String result = FacebookDialog.getNativeDialogCompletionGesture(data);
Log.i("Data", result);
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.face_login:
doLogin();//在没有app的情况下进行网页授权
break;
case R.id.face_share:
doShare();//在没有APP的情况下 不能分享
break;
case R.id.face_login_out:
onClickLogout();
break;
default:
break;
}
}
private void doLogin(){
// Session.openActiveSession(this, true, new StatusCallback() {
// @Override
// public void call(Session session, SessionState state, Exception exception) {
// if(session.isOpened()){
// // get token
// Toast.makeText(FaceBookTest.this, session.getAccessToken(), Toast.LENGTH_SHORT).show();
// }
// }
// });
Session session = Session.getActiveSession();
if (!session.isOpened() && !session.isClosed()) {
session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
} else {
Session.openActiveSession(this, true, statusCallback);
}
}
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state, Exception exception) {
if(session.isOpened()){
// get token
Toast.makeText(FaceBookTest.this, session.getAccessToken(), Toast.LENGTH_SHORT).show();
}
}
}
private void onClickLogout() {
Session session = Session.getActiveSession();
if (!session.isClosed()) {
session.closeAndClearTokenInformation();
}
}
public void doShare(){
try {
FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(this)
.setLink("https://developers.facebook.com/android")
.setApplicationName("AndroidBaiDuPush")
.setDescription("description")
.setName("name")
.setCaption("caption")
.setPlace("place")
.setPicture("http://219.232.161.206:80/data/userdata/vismam/downfile/201307/01191850Ax44.jpeg")
.build();
uiHelper.trackPendingDialogCall(shareDialog.present());
} catch (FacebookException e) {
Toast.makeText(getApplication(), "Facebook app is not installed", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(getApplication(), "Unexpect Exception", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state,Exception exception) {
onSessionStateChange(session, state, exception);
}
};
private void onSessionStateChange(Session session, SessionState state,
Exception exception) {
if (state.isOpened()) {
Log.i("tag", "Logged in...");
} else if (state.isClosed()) {
Log.i("tag", "Logged out...");
}
}
}
实现: 登录获取token 分享 退出
doLogin();//在没有app的情况下进行网页授权
doShare();//在没有APP的情况下 不能分享
onClickLogout();
app_key 需要在Strings 里面声明,直接卸载配置文件当中会找不到Key 报错!
在运行代码的时候 前期一直不能成功,然后看提示语 发现都是hashKey的问题,此处需要多注意一下,这个hashKey和你得签名文件是有关联的,不同的eclispe或者打包工具对应不同的hashKey
根据提示 很明白 是分享的dialog
在.setApplicationName的时候 和注册APP的是不匹配的 自己去看申请是填写的名称 修改即可
另外只回调初期 无论分享是成功还是取消都走onComplete 提示Success 后看源码和onComplete代码发现有data
于是分别在取消分享和成功分享的时候查看data
Ok此时就知道了
String result = data.getString("com.facebook.platform.extra.COMPLETION_GESTURE");//cancel取消 post成功
最后 注意一点的是 facebook的第三方库 要放在你得项目的同级磁盘下,不然导入库的时候会报错
以上个人测试是通过的。如有大牛研究得更多的话,可留言告知!
代码未整理 但应该可以明白
- Facebook 登录和分享 分类: Android开发常识
- Android集成Twitter和facebook登录分享
- Android 集成facebook 登录和分享
- Facebook 登录和分享
- facebook登录和分享
- Android Facebook和Twitter登录和分享完整版
- Facebook第三方登录和分享
- Android Facebook和Twitter分享
- [置顶] Android Facebook和Twitter登录和分享完整版 标签: facebooktwitter 2016-09-07 18:40
- Facebook SDK 登录分享
- Android FaceBook 第三方登录开发摘要
- Android facebook VK 登录与分享 开源SDK
- facebook和twitter三方登录分享的实现
- IOS,Android-Facebook分享
- Android 开发 shareSDK 分享的时候 如何设置 登录和分享走客户端?
- 【IOS和Android】Cocos2d-x 集成Facebook分享功能
- IOS 自带facebook登录分享
- facebook第三方登录开发
- 第十周项目一 程序填充与阅读3 getchar()
- 比较全而且厉害的网站(作者很流弊的样子有木有!)
- Google C++ Style Guide中英对照(一)
- 基于MVC4+EF5+EasyUI技术实现通用权限管理系统(EpPlus、HignCharts、Reportviewer报表)
- WEB下使用的OFFICE控件介绍
- Facebook 登录和分享 分类: Android开发常识
- iOS学习之 plist文件的读写
- Visual c++ 6.0配置OpenCV开发环境
- 第10周项目2
- opengl
- android开发之StartActivityForResult
- Oracle集合操作函数:Union、Union All、Intersect、Minus
- 一个非常标准的Java连接Oracle数据库的示例代码
- 栈