Facebook(二)使用LoginButton实现授权登录并注销授权信息
来源:互联网 发布:比思论坛最新域名 编辑:程序博客网 时间:2024/04/28 01:12
一、实现效果
第一次进入应用
点击授权按钮
授权完毕跳转
点击Lou out 退出应用
第二次进入应用
二、关键代码
1.布局文件
activity_login.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:facebook="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.facebook.widget.LoginButton android:id="@+id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" /></LinearLayout>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" android:gravity="center" android:orientation="vertical" > <TextView android:id="@+id/greeting" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="10dp" android:text="username" android:textColor="#333" android:textSize="18sp" /> <com.facebook.widget.ProfilePictureView android:id="@+id/profilePicture" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:gravity="center_horizontal" /> <TextView android:id="@+id/other_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="10dp" android:text="other info" android:textColor="#333" android:textSize="18sp" /> <Button android:id="@+id/clicklogout" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="log out " /></LinearLayout>2.关键类
MyLoginActivity.java
package com.facebook.samples.hellofacebook.example;import java.util.Arrays;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.widget.Toast;import com.facebook.Session;import com.facebook.Session.AuthorizationRequest;import com.facebook.SessionState;import com.facebook.UiLifecycleHelper;import com.facebook.model.GraphUser;import com.facebook.samples.hellofacebook.R;import com.facebook.widget.FacebookDialog;import com.facebook.widget.LoginButton;public class MyLoginActivity extends Activity {protected static final String TAG = "MyLoginActivity";private LoginButton loginButton;private GraphUser user;private UiLifecycleHelper uiHelper;private Session.StatusCallback callback;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);callback = new Session.StatusCallback() {@Overridepublic void call(Session session, SessionState state, Exception exception) {if (state.isOpened()) {Log.e(TAG, "log in");} else {Log.e(TAG, "log out ");}updateUI();}};uiHelper = new UiLifecycleHelper(this, callback);loginButton = (LoginButton) findViewById(R.id.login_button);loginButton.setReadPermissions(Arrays.asList("user_likes", "user_status"));loginButton.setUserInfoChangedCallback(new LoginButton.UserInfoChangedCallback() {@Overridepublic void onUserInfoFetched(GraphUser user) {MyLoginActivity.this.user = user;updateUI();}});// 设置授权状态监听loginButton.setSessionStatusCallback(callback);}// 该方法会不断的被调用,因为按钮设置了UserinfoChangedCallback监听回调private void updateUI() {Session session = Session.getActiveSession();// 取得用户信息boolean enableButtons = (session != null && session.isOpened());if (enableButtons && user != null) {Intent intent = new Intent(MyLoginActivity.this, MainActivity.class);Bundle bundle = new Bundle();bundle.putString("userid", user.getId());bundle.putString("username", user.getUsername());bundle.putString("otherinfo", "firstname:" + user.getFirstName() + ",lastname:" + user.getLastName() + "JSON:" + user.getInnerJSONObject().toString());intent.putExtra("user", bundle);startActivity(intent);finish();} else if (session != null && session.isClosed()) {user = null;} else {return;}}// 授权成功后会调用该方法获得返回的信息@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);uiHelper.onActivityResult(requestCode, resultCode, data, dialogCallback);}private FacebookDialog.Callback dialogCallback = new FacebookDialog.Callback() {@Overridepublic void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) {Log.d("HelloFacebook", String.format("Error: %s", error.toString()));Toast.makeText(MyLoginActivity.this, "error", 0).show();}@Overridepublic void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) {Toast.makeText(MyLoginActivity.this, "success", 0).show();}};}
MainActivity.java
package com.facebook.samples.hellofacebook.example;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import com.facebook.Session;import com.facebook.samples.hellofacebook.R;import com.facebook.widget.ProfilePictureView;public class MainActivity extends Activity {private ProfilePictureView userimage;private TextView username, otherinfo;private String useridStr;private String usernameStr;private String otherinfoStr;private Button logout;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);userimage = (ProfilePictureView) this.findViewById(R.id.profilePicture);username = (TextView) this.findViewById(R.id.greeting);otherinfo = (TextView) this.findViewById(R.id.other_info);Intent intent = getIntent();Bundle bundle = intent.getBundleExtra("user");usernameStr = bundle.getString("username");useridStr = bundle.getString("userid");otherinfoStr = bundle.getString("otherinfo");userimage.setProfileId(useridStr);username.setText(usernameStr);otherinfo.setText(otherinfoStr);logout = (Button) this.findViewById(R.id.clicklogout);logout.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Session.getActiveSession().closeAndClearTokenInformation();finish();}});}}
3.配置文件
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.facebook.samples.hellofacebook" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="9" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.Light.NoTitleBar" > <activity android:name="com.facebook.samples.hellofacebook.example.MyLoginActivity" android:label="@string/app_name" android:windowSoftInputMode="adjustResize" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.facebook.samples.hellofacebook.example.MainActivity" > </activity> <!-- Facebook --> <activity android:name="com.facebook.LoginActivity" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id2" /> <provider android:name="com.facebook.NativeAppCallContentProvider" android:authorities="com.facebook.app.NativeAppCallContentProvider233936543368280" android:exported="true" /> </application></manifest>
上面的demo是在Facebook提供的demo的基础上进行简化的,看起来很明了。
0 0
- Facebook(二)使用LoginButton实现授权登录并注销授权信息
- Android下使用最新FaceBook SDK 3.0(二)使用facebook实现登录注销
- iOS-facebook授权登录
- Yii之登录、注销、验证、授权理解
- mysql 远程登录并授权
- mysql 远程登录并授权
- 创建登录用户并授权
- 微信授权登录实现
- 微信第三方平台开发经验总结(五):接收授权方授权请求并保存授权方信息
- 使用Oauth2.0实现微博授权登录
- OAuth授权(二)
- PHP微信授权登录信息
- CentOS安装mysql并授权远程登录
- CentOS安装mysql并授权远程登录
- sharesdk 登录facebook授权显示登陆错误解决
- 2、facebook PHP版 SDK 身份验证和授权登录
- Facebook应用程序授权机制
- facebook SDK授权
- 解决.net抓取网页速度慢问题
- (搜索引擎之solr) Apache Solr – Facet介绍
- javascript中将字符串转换成date类型
- 怎么样进行游戏测试
- 怎么在Mac上安装Tomcat 7
- Facebook(二)使用LoginButton实现授权登录并注销授权信息
- 用reset.css重置浏览器默认样式的重要性
- IOS for any added folders
- printError
- 黑马程序员_Java_GUI
- 运输管理协议TMP概述(一)
- androidpn 作为Android推送方案存在的问题
- ubuntu13.10 下 g++和gcc 4.8不兼容无法安装的问题
- 如何将自定义的.jar设置为系统自带的