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
原创粉丝点击