Facebook sdk嵌入,登陆与注销
来源:互联网 发布:美化图片的软件 编辑:程序博客网 时间:2024/05/16 15:34
最近项目需要使用Facebook登陆。在做完之后于是就像总结下,方便后来人使用。Facebook需要翻墙才能登陆。网上有好多翻墙软件和教程,大家可以先去看看。
使用Facebook登陆首需要去https://developers.facebook.com Facebook开发者平台上去注册一个开发者账号,可以使用Facebook账号登陆。
注册完成之后点击My Apps菜单选项下Add a New App 创建一个新的项目。
选择你需要的接入的类型:
这里以选择Android教程为例。选择Android以后根据Facebook提供的步骤填写资料就可以完成初期准备,完成之后的结果。
在这里值得注意点是Hashes值,这里稍微有点坑,
这里描述下Development key Hashes值就是Debug模式下哈希值,下面Release Key Hash就是正式签名打包以后的哈希值。
在onCreate方面里面打印当前哈希值
/** * 获取hash值 */ private void getKeyHash() { try { PackageInfo info = getPackageManager().getPackageInfo("你的包名",PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); DebugLogs.e("KeyHash:" + Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (PackageManager.NameNotFoundException e) { //something } catch (NoSuchAlgorithmException e) { //something } }
Development key Hashes生成方式。
Development key Hashes生成方式相对简单直接 将下面命令复制到命令里面运行就可以了。Mac开打终端 输入下面命令行,这时会要求输入密钥库口令。就是默认口令‘Android’就好了。Window同理。
for mac生成方式:keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
for windows :keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
以上就是生成dubug模式下的哈希值。
Release Key Hash正式:
需要生成签名密钥debug.keystore。密钥生成完毕以后打开终端输入:keytool -exportcert -alias 名称 -keystore C:\Users\Tom\.android\debug.keystore | openssl sha1 -binary | openssl base64
-alias 后面紧接着就是名称
-keystore 存放keystore路径,
直接运行,输入debug.keystore的密钥口令就可以获得正式签名包得hash值,到这里算是完成了一半。
接下来就是接入SDK的过程,在上面申请Appid 的流程里面第一步就是需要你下载一个SDK这个时候,就可以使用了。我们新建自己的项目。然后将sdk作为lib项目导入自己项目中只需要Facebook这个项目就可以了。
首先我们看 androidMainfest.xml文件
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>...<activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name" /> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/> <meta-data android:name="com.facebook.sdk.ApplicationName" android:value="@string/facebook_app_name" /> <provider android:authorities="com.facebook.app.FacebookContentProvider这里填写app_id" android:name="com.facebook.FacebookContentProvider" android:exported="true"/>
这里注意两个地方就好了。app_id填写, app_id最好在String.xml文件里。
登陆按钮。
<com.facebook.login.widget.LoginButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_gravity="center_horizontal" facebook:com_facebook_confirm_logout="false" facebook:com_facebook_tooltip_mode="never_display" />
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:facebook="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="vertical"> <com.facebook.login.widget.LoginButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_gravity="center_horizontal" facebook:com_facebook_confirm_logout="false" facebook:com_facebook_tooltip_mode="never_display" /> <TextView android:id="@+id/info_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20dp" android:textColor="@android:color/black" android:gravity="center" /> <com.facebook.login.widget.ProfilePictureView android:id="@+id/profilePicture" android:layout_height="wrap_content" android:layout_width="wrap_content" android:gravity="center_horizontal" android:layout_marginBottom="10dp" facebook:com_facebook_preset_size="normal" /></LinearLayout>
MainActivity.java
import android.app.Activity;import android.content.Intent;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.content.pm.Signature;import android.os.Bundle;import android.util.Base64;import android.widget.TextView;import com.facebook.AccessToken;import com.facebook.CallbackManager;import com.facebook.FacebookCallback;import com.facebook.FacebookException;import com.facebook.FacebookSdk;import com.facebook.Profile;import com.facebook.ProfileTracker;import com.facebook.appevents.AppEventsLogger;import com.facebook.login.LoginManager;import com.facebook.login.LoginResult;import com.facebook.login.widget.ProfilePictureView;import net.dev.mylib.DebugLogs;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MainActivity extends Activity { private CallbackManager callbackManager; private ProfileTracker profileTracker; private TextView info = null; private ProfilePictureView profilePictureView;//图片控件 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(this.getApplicationContext()); getKeyHash(); callbackManager = CallbackManager.Factory.create();//创建回调工厂 //登陆成功以后回调 LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { updateUI(); } @Override public void onCancel() { updateUI(); } @Override public void onError(FacebookException exception) { DebugLogs.e("-----onError----->" + exception); updateUI(); } }); setContentView(R.layout.activity_main); profilePictureView = (ProfilePictureView)findViewById(R.id.profilePicture); info = (TextView)findViewById(R.id.info_text); //刷新获取个人用户资料 profileTracker = new ProfileTracker() { @Override protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) { updateUI(); //It`s possible that we were waiting for Profile to be populated in order to post a status update. } }; DebugLogs.e(getResources().getConfiguration().locale.getCountry()); } /** * 获取hash值 */ private void getKeyHash() { try { PackageInfo info = getPackageManager().getPackageInfo("com.anykey.balala",PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); DebugLogs.e("KeyHash:" + Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (PackageManager.NameNotFoundException e) { //something } catch (NoSuchAlgorithmException e) { //something } } //UpdateUi() private void updateUI(){ boolean enableButton = AccessToken.getCurrentAccessToken() != null; Profile profile = Profile.getCurrentProfile();//获取登陆成功以后的数据 if (enableButton && profile != null) { info.setText(profile.toString()+"\n"+"成功以后的获取ID---->:"+profile.getId()+"\n"+"成功后的获取信息:" +profile.getLastName() + profile.getFirstName()+"\n头像"+ profile.getProfilePictureUri(50,50)); profilePictureView.setProfileId(profile.getId()); DebugLogs.e("成功以后的获取ID---->:" + profile.getId()); DebugLogs.e("成功后的获取信息getFirstName:" + profile.getFirstName()); DebugLogs.e("成功后的获取信息getMiddleName:" + profile.getMiddleName()); DebugLogs.e("成功后的获取信息getName:" + profile.getName()); DebugLogs.e("成功后的获取信息getLinkUri:" + profile.getLinkUri()); } else { DebugLogs.e("获取信息失败"); } } //接受回调 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } @Override protected void onResume() { super.onResume(); // Logs 'install' and 'app activate' App Events. AppEventsLogger.activateApp(this); } @Override protected void onPause() { super.onPause(); // Logs 'app deactivate' App Event. AppEventsLogger.deactivateApp(this); } @Override protected void onDestroy() { super.onDestroy(); profileTracker.stopTracking(); }}
完成以上步骤基本可以实现Facebook登陆与注销。祝大家写代码愉快
- Facebook sdk嵌入,登陆与注销
- facebook Web javascript sdk 登陆获取个人信息
- 注销登陆
- 登陆、注销
- 登陆、注销
- 注销登陆
- Android下使用最新FaceBook SDK 3.0(二)使用facebook实现登录注销
- 如何注销Facebook账户
- [UWP开发] Facebook SDK使用(一) —— 配置SDK及Facebook登陆
- 登陆系统自动注销
- servlet 登陆注销案例
- 用户登陆如何注销。
- 登陆注销(session)
- Janrain: Facebook与Google占据76%社交登陆验证入口
- 关闭窗口,立即注销登陆
- XP登陆就自动注销
- 用户登陆和注销方式
- XMPP实现登陆注销功能
- 在网页中加入JavaScript
- 修改Eclipse格式化代默认长度
- UE4 Roadmap
- FFMPEG基于内存的转码实例——输入输出视频均在内存
- Java enum的用法详解
- Facebook sdk嵌入,登陆与注销
- eclipse+webservice开发实例
- java.sql.SQLException: Access denied for user 'Administrator'@'localhost' (using password: YES)
- js重要函数
- 如何让程序主界面不可用
- 栈之顺序栈
- Android代码规范
- 多线程状态
- 背包之01背包、完全背包、多重背包详解