问题描述
我在android系统工作的facebook集成。我一派,它的工作。但我不知道为什么,当我已经在我的手机的Facebook应用程序无法正常工作。
它是开放的Facebook登录页面时,我没有Facebook应用程序,在我的手机。
我的code:
MainActivity:进口android.support.v7.app.ActionBarActivity;
进口android.os.Bundle;进口android.util.Base64;
进口android.view.Menu;
进口android.view.MenuItem;
进口android.view.View;
进口android.widget.Button;
进口android.provider.Settings;进口android.util.Log;进口com.facebook.CallbackManager;
进口com.facebook.FacebookCallback;
进口com.facebook.FacebookException;
进口com.facebook.FacebookSdk;
进口com.facebook.GraphRequest;
进口com.facebook.GraphResponse;
进口com.facebook.login.LoginManager;
进口com.facebook.login.LoginResult;
进口com.google.android.gms.common.ConnectionResult;
进口com.google.android.gms.common.GooglePlayServicesUtil;
进口com.google.android.gms.common.Scopes;
进口com.google.android.gms.common.api.GoogleApiClient;
进口com.google.android.gms.common.api.Scope;
进口com.google.android.gms.plus.Plus;
进口com.google.android.gms.plus.model.people.Person;进口org.json.JSONException;
进口org.json.JSONObject;进口java.security.MessageDigest中;
进口java.security.NoSuchAlgorithmException;
进口java.util.Arrays中;
进口java.util.Set中;公共类MainActivity扩展ActionBarActivity {
按钮fb_login; 公共静态CallbackManager callbackmanager;
//注册signup_task = NULL; 私人布尔fb_signincllicked = FALSE; @覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
FacebookSdk.sdkInitialize(getApplicationContext());
fb_login =(按钮)findViewById(R.id.fb_login);
fb_login.setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(查看视图){
onFblogin(真);
}
});
} @覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
//充气菜单;如果是present这增加了项目操作栏。
。getMenuInflater()膨胀(R.menu.menu_main,菜单);
返回true;
} @覆盖
公共布尔onOptionsItemSelected(菜单项项){
//处理动作栏项目点击这里。操作栏会
//自动处理上点击主页/向上按钮,只要
//你在AndroidManifest.xml中指定一个父活动。
INT ID = item.getItemId(); // noinspection SimplifiableIfStatement
如果(ID == R.id.action_settings){
返回true;
} 返回super.onOptionsItemSelected(项目);
} 公共无效onFblogin(布尔fb_btn){ fb_signincllicked = fb_btn; callbackmanager = CallbackManager.Factory.create(); //设置权限
LoginManager.getInstance()logInWithReadPermissions(这一点,Arrays.asList(public_profile,电子邮件))。 。LoginManager.getInstance()registerCallback(callbackmanager,新FacebookCallback< LoginResult>(){
@覆盖
公共无效的onSuccess(LoginResult loginResult){
Log.v(TAG_JSONOBJECT2,+的JSONObject); 决胜盘<串GT; deniedPermissions = loginResult.getRecentlyDeniedPermissions(); GraphRequest.newMeRequest(loginResult.getAccessToken(),新GraphRequest.GraphJSONObjectCallback(){ @覆盖
公共无效onCompleted(JSON的JSONObject,GraphResponse响应){ 如果(response.getError()!= NULL){ }其他{
尝试{ 如果(deniedPermissions.contains(电子邮件)){
LoginManager.getInstance()logInWithReadPermissions(MainActivity.this,Arrays.asList(电子邮件))。
} 的JSONObject的JSONObject =新的JSONObject(); jsonObject.put(FULL_NAME,json.getString(名字));
jsonObject.put(DEVICE_ID,Settings.Secure.getString(getContentResolver(),Settings.Secure.ANDROID_ID));
jsonObject.put(fb_id,json.getString(ID));
jsonObject.put(signuptype,1); / * signup_task =新注册(MainActivity.this);
如果(signup_task.getStatus()!= AsyncTask.Status.RUNNING){
signup_task.execute(jsonObject.toString());
signup_task.signupcompleted = MainActivity.this;
} * / }赶上(JSONException E){
e.printStackTrace();
}
}
}
})executeAsync()。
} @覆盖
公共无效onCancel(){
Log.v(TAG_JSONOBJECTCANCEL,+的JSONObject);
Log.d(取消,关于取消);
} @覆盖
公共无效onerror的(FacebookException错误){
Log.d(错误,error.toString());
}
});
}
}
清单文件:
<?XML版本=1.0编码=UTF-8&GT?;
<清单的xmlns:机器人=http://schemas.android.com/apk/res/android
包=com.al.name> <使用许可权的android:NAME =android.permission.INTERNET对/>
<应用
机器人:allowBackup =真
机器人:图标=@的mipmap / ic_launcher
机器人:标签=@字符串/ APP_NAME
机器人:主题=@风格/ AppTheme>
&所述;元数据
机器人:名字=com.facebook.sdk.ApplicationId
机器人:值=@字符串/ fb_appid/>
&所述;元数据
机器人:名字=com.google.android.gms.version
机器人:值=@整数/ GOOGLE_PLAY_SERVICES_VERSION/> <活动
机器人:名字=com.al.MainActivity
机器人:标签=@字符串/ APP_NAME>
&所述;意图滤光器>
<作用机器人:名字=android.intent.action.MAIN/> <类机器人:名字=android.intent.category.LAUNCHER/>
&所述; /意图滤光器>
< /活性GT;
<活动
机器人:名字=com.facebook.FacebookActivity
机器人:configChanges =键盘| keyboardHidden |屏幕布置|屏幕尺寸|定位
机器人:标签=@字符串/ APP_NAME
机器人:主题=@安卓风格/ Theme.Translucent.NoTitleBar/>
< /用途>< /清单>
的gradle构建:
应用插件:'com.android.application安卓{
compileSdkVersion 21
buildToolsVersion21.1.2 库{
mavenCentral()
} defaultConfig {
的applicationIDcom.al.name
10的minSdkVersion
targetSdkVersion 21
版本code 1
的versionName1.0
}
buildTypes {
发布 {
minifyEnabled假
proguardFiles getDefaultProguardFile('proguard的-android.txt'),'proguard-rules.pro
}
}
}依赖{
编译文件树(导演:'库',包括:['的* .jar'])
编译com.android.support:appcompat-v7:21.0.3
编译com.google.android.gms:播放服务:7.3.0
编译com.facebook.android:facebook-android-sdk:4.5.0
}
哈希键生成code:
{尝试
PackageInfo信息= getPackageManager()。getPackageInfo(
包名,
PackageManager.GET_SIGNATURES);
对(签字签名:info.signatures){
消息摘要MD = MessageDigest.getInstance(SHA);
md.update(signature.toByteArray());
Log.d(KeyHash:Base64.en codeToString(md.digest(),Base64.DEFAULT));
}
}赶上(ē的NameNotFoundException){ }赶上(抛出:NoSuchAlgorithmException E){ }
我使用Facebook的辅助类登录。
FacebookHelper.java
公共类FacebookHelper {私有静态最后弦乐TAG =FbHelper;
私人活动活动;
私人StatusCallback statusCallback =新SessionStatusCallback();公共FacebookHelper(){
}公共FacebookHelper(活动活动){ this.activity =活动;
}公共FacebookHelper(活动活动,捆绑savedInstanceState){ this.activity =活动;
Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); 会话的会话= Session.getActiveSession();
如果(会话== NULL || session.getState()。在isClosed()){
如果(savedInstanceState!= NULL){
会话= Session.restoreSession(活动,空,
statusCallback,savedInstanceState);
}
//如果(会话== NULL){
会话=新的Session(活动);
//}
Session.setActiveSession(会话);
如果(session.getState()。等于(SessionState.CREATED_TOKEN_LOADED)){
session.openForRead(新Session.OpenRequest(活动)
.setCallback(statusCallback));
}
}
}公共Session.StatusCallback getStatusCallback(){
返回statusCallback;
}公共无效loginToFacebook(){
会话的会话= Session.getActiveSession();
如果(session.isOpened()及!&放大器;!session.isClosed()){
session.openForRead(新Session.OpenRequest(活动)
.setPermissions(Arrays.asList(电子邮件/ *,user_birthday* /USER_LOCATION))
.setCallback(statusCallback));
}其他{
Session.openActiveSession(活动,真实,statusCallback);
}
}公共无效logoutFromFacebook(){ 会话的会话= Session.getActiveSession();
如果(会话!= NULL){
session.closeAndClearTokenInformation();
}
}公共布尔isLoggedInFromFb(){
会话的会话= Session.getActiveSession();
如果(会话= NULL&放大器;!&安培; session.isOpened()){
返回true;
}其他{
返回false;
}
}公共无效AP prequest(最终活动活动,最后弦乐ID){ Session.openActiveSession(活动,真,新StatusCallback(){ @覆盖
公共无效呼叫(会话的会话,SessionState会状态,异常除外){ 如果(session.isOpened()){ 捆绑PARAMS =新包();
params.putString(至,ID);
params.putString(消息,EGrocery邀请); WebDialog requestsDialog =(
新WebDialog.RequestsDialogBuilder(活动,
Session.getActiveSession(),
PARAMS))
.setOnCompleteListener(新OnCompleteListener(){ @覆盖
公共无效的onComplete(束值,
FacebookException错误){
// TODO自动生成方法存根
如果(错误!= NULL){
如果(错误的instanceof FacebookOperationCanceledException){
//Toast.makeText(activity,R.string.txt_invitation_cancel,
// Toast.LENGTH_SHORT).show();
}其他{
// Toast.makeText(活动,R.string.txt_invitation_cancel,
// Toast.LENGTH_SHORT).show();
}
}其他{
最后弦乐的requestId = values.getString(请求);
如果(的requestId!= NULL){
Toast.makeText(活动,邀请成功
Toast.LENGTH_SHORT).show();
}其他{
// Toast.makeText(活动,R.string.txt_invitation_cancel,
// Toast.LENGTH_SHORT).show();
}
}
} })
。建立();
requestsDialog.show(); //低于3代码加入BY SHAHZEB KHOWAJA。
/ *如果(!requestsDialog.isShowing()){
requestsDialog.show();
} * /
}
} });
}公共无效postOnWall(最终活动活动,最终的字符串名称,最后弦乐标题,最后的字符串描述,
最后弦乐环节,最后弦乐图片){ Session.openActiveSession(活动,真,新StatusCallback(){ @覆盖
公共无效呼叫(会话的会话,SessionState会状态,异常除外){
// TODO自动生成方法存根 如果(session.isOpened()){ 捆绑PARAMS =新包();
params.putString(名,名);
params.putString(标题,字幕); //DrawWithFriends
params.putString(说明,说明); //pa.getUserProfile()。getFullName()+共用了单词+ challengeQuestions.get(current_num_question).getQuestion()。屏幕取词()+与你在prepsta
params.putString(链接的链接);
params.putString(图片报图片); WebDialog feedDialog =(
新WebDialog.FeedDialogBuilder(活动,
Session.getActiveSession(),
PARAMS))
.setOnCompleteListener(新OnCompleteListener(){ @覆盖
公共无效的onComplete(束值,
FacebookException错误){
如果(错误== NULL){
//当故事被张贴,呼应成功
//和帖子的ID。
最终字符串postid = values.getString(POST_ID);
如果(帖子ID!= NULL){
/*Toast.makeText(ChallengeModeActivity.this,
张贴的故事,ID:+帖子ID,
Toast.LENGTH_SHORT).show(); * / Toast.makeText(活动发布成功
Toast.LENGTH_SHORT).show();
}其他{
//用户点击了取消按钮
//Toast.makeText(activity,R.string.txt_post_cancel,
// Toast.LENGTH_SHORT).show();
}
}否则如果(错误的instanceof FacebookOperationCanceledException){
//用户点击X按钮
//Toast.makeText(activity,R.string.txt_post_cancel,
// Toast.LENGTH_SHORT).show();
}其他{
//通用,例如:网络错误
//Toast.makeText(activity,R.string.txt_post_cancel,
// Toast.LENGTH_SHORT).show();
}
} })
。建立();
feedDialog.show(); }
}
});}公共无效getFacebookFriends(最终活动活动){ Session.openActiveSession(活动,真,新StatusCallback(){ @覆盖
公共无效呼叫(会话的会话,SessionState会状态,异常除外){ 如果(session.isOpened()){
Utils.Log(Constants.LOG_I,TAG,Facebook的进程中打开); 请求friendRequest = Request.newMyFriendsRequest(会话,新Request.GraphUserListCallback(){ @燮pressWarnings(未登记)
@覆盖
公共无效onCompleted(列表< GraphUser>的用户,响应响应){
// TODO自动生成方法存根
如果(response.getError()!= NULL){
Utils.Log(Constants.LOG_I,
TAG,的String.format(错误决策的要求:%S,response.getError()));
}其他{ Utils.Log(Constants.LOG_D,Constants.TAG,FB的朋友:+ response.toString());
((IFbCallback<名单,LT; GraphUser>中响应>)活性).onFbRequestComplete(用户,响应);
}
}
}); / *捆绑PARAMS =新包();
params.putString(域,ID,名称,图片);
friendRequest.setParameters(PARAMS); * /
friendRequest.executeAsync();
} } });
}私有类SessionStatusCallback实现Session.StatusCallback {
@覆盖
公共无效呼叫(会话的会话,SessionState会状态,异常除外){ 如果(session.isOpened()){
Utils.Log(Constants.LOG_I,TAG,Facebook的进程中打开); Request.newMeRequest(会话,新Request.GraphUserCallback(){ @燮pressWarnings(未登记)
@覆盖
公共无效onCompleted(GraphUser用户,响应响应){
// TODO自动生成方法存根 如果(response.getError()!= NULL){
Utils.Log(Constants.LOG_I,
TAG,的String.format(错误决策的要求:%S,response.getError()));
}其他{ ((IFbCallback< GraphUser,响应>)活性).onFbRequestComplete(用户,响应);
}
}
})executeAsync()。
}
}
}
}
MainActivity.java
公共类LoginActivity扩展活动实现OnClickListener,IFbCallback< GraphUser,响应> {
私人FacebookHelper fbHelper;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_login); fbHelper =新FacebookHelper(这一点,savedInstanceState); initControls();
}@覆盖
保护无效调用onStart(){
// TODO自动生成方法存根
super.onStart();
。Session.getActiveSession()的addCallback(fbHelper.getStatusCallback());
//googleHelper.getGoogleApiClient()连接()。
}@覆盖
保护无效的onStop(){
// TODO自动生成方法存根
super.onStop();
。Session.getActiveSession()removeCallback(fbHelper.getStatusCallback());
}私人无效initControls(){ 按钮fbSignInBtn =(按钮)findViewById(R.id.login_fb_sign_in_btn); //监听器
fbSignInBtn.setOnClickListener(本);
}@覆盖
保护无效的onActivityResult(INT申请code,INT结果code,意图数据){
super.onActivityResult(要求code,结果code,数据);
Session.getActiveSession()的onActivityResult(这一点,要求code,结果code,数据)。
}@覆盖
公共无效的onClick(视图v){ 开关(v.getId()){ 案例R.id.login_fb_sign_in_btn: fbHelper.loginToFacebook();
打破;
}
}@覆盖
公共无效onFbRequestComplete(GraphUser graphUser,响应响应){ Utils.Log(Constants.LOG_E,Constants.TAG,response.toString()); //存储值本地
字符串的uid = graphUser.getId();
字符串FIRST_NAME = graphUser.getFirstName();
字符串姓氏= graphUser.getLastName();
字符串email =; 如果(response.toString()。包含(电子邮件)){
。电子邮件= graphUser.getProperty(电子邮件)的toString();
} Log.e(MainActivity,ID:+ UID);
Log.e(MainActivity,第一个名字:+ FIRST_NAME);
Log.e(MainActivity,姓氏:+姓氏);
Log.e(MainActivity,电子邮件:+电子邮件);
}
}
创建和实现接口
公共接口IFbCallback< G,R> {公共无效onFbRequestComplete(G graphUser,R反应);
}
添加的build.gradle文件
应用插件:'com.android.application安卓{
compileSdkVersion 22
buildToolsVersion23.0.0 RC3defaultConfig {
的applicationIDcom.dvmfashion
15的minSdkVersion
targetSdkVersion 22
版本code 1
的versionName1.0
}
buildTypes {
发布 {
minifyEnabled假
proguardFiles getDefaultProguardFile('proguard的-android.txt'),'proguard-rules.pro
}
}
}依赖{
编译文件树(导演:'库',包括:['的* .jar'])
编译com.android.support:appcompat-v7:22.2.1
编译com.facebook.android:facebook-android-sdk:3.19.0
}
I am working on facebook integration in android. I googled and working on it. But i don't know why it is not working when i already have facebook app in my mobile.It is opening login page of facebook when i don't have facebook app in my mobile.
my code:
MainActivity:
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Base64;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.provider.Settings;
import android.util.Log;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.common.Scopes;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.Scope;
import com.google.android.gms.plus.Plus;
import com.google.android.gms.plus.model.people.Person;
import org.json.JSONException;
import org.json.JSONObject;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Set;
public class MainActivity extends ActionBarActivity {
Button fb_login;
public static CallbackManager callbackmanager;
//Signup signup_task = null;
private boolean fb_signincllicked = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FacebookSdk.sdkInitialize(getApplicationContext());
fb_login = (Button) findViewById(R.id.fb_login);
fb_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onFblogin(true);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void onFblogin(boolean fb_btn) {
fb_signincllicked = fb_btn;
callbackmanager = CallbackManager.Factory.create();
// Set permissions
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email"));
LoginManager.getInstance().registerCallback(callbackmanager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.v("TAG_JSONOBJECT2", "" + "jsonObject");
final Set<String> deniedPermissions = loginResult.getRecentlyDeniedPermissions();
GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject json, GraphResponse response) {
if (response.getError() != null) {
} else {
try {
if (deniedPermissions.contains("email")) {
LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("email"));
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("full_name", json.getString("name"));
jsonObject.put("device_id", Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID));
jsonObject.put("fb_id", json.getString("id"));
jsonObject.put("signuptype", "1");
/* signup_task = new Signup(MainActivity.this);
if (signup_task.getStatus() != AsyncTask.Status.RUNNING) {
signup_task.execute(jsonObject.toString());
signup_task.signupcompleted = MainActivity.this;
}*/
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}).executeAsync();
}
@Override
public void onCancel() {
Log.v("TAG_JSONOBJECTCANCEL", "" + "jsonObject");
Log.d("Cancel", "On cancel");
}
@Override
public void onError(FacebookException error) {
Log.d("Error", error.toString());
}
});
}
}
manifest file:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.al.name">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/fb_appid" />
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity
android:name="com.al.MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
</application>
</manifest>
build gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
repositories {
mavenCentral()
}
defaultConfig {
applicationId "com.al.name"
minSdkVersion 10
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.google.android.gms:play-services:7.3.0'
compile 'com.facebook.android:facebook-android-sdk:4.5.0'
}
hash key generation code:
try {
PackageInfo info = getPackageManager().getPackageInfo(
"package name",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
I am using Facebook helper class for login.
FacebookHelper.java
public class FacebookHelper {
private static final String TAG = "FbHelper";
private Activity activity;
private StatusCallback statusCallback = new SessionStatusCallback();
public FacebookHelper(){
}
public FacebookHelper(Activity activity){
this.activity = activity;
}
public FacebookHelper(Activity activity, Bundle savedInstanceState){
this.activity = activity;
Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
Session session = Session.getActiveSession();
if (session == null || session.getState().isClosed()) {
if (savedInstanceState != null) {
session = Session.restoreSession(activity, null,
statusCallback, savedInstanceState);
}
//if (session == null) {
session = new Session(activity);
//}
Session.setActiveSession(session);
if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
session.openForRead(new Session.OpenRequest(activity)
.setCallback(statusCallback));
}
}
}
public Session.StatusCallback getStatusCallback() {
return statusCallback;
}
public void loginToFacebook() {
Session session = Session.getActiveSession();
if (!session.isOpened() && !session.isClosed()) {
session.openForRead(new Session.OpenRequest(activity)
.setPermissions(Arrays.asList("email"/*,"user_birthday"*/,"user_location"))
.setCallback(statusCallback));
} else {
Session.openActiveSession(activity, true, statusCallback);
}
}
public void logoutFromFacebook() {
Session session = Session.getActiveSession();
if (session != null) {
session.closeAndClearTokenInformation();
}
}
public boolean isLoggedInFromFb() {
Session session = Session.getActiveSession();
if (session != null && session.isOpened()) {
return true;
} else {
return false;
}
}
public void appRequest(final Activity activity, final String id){
Session.openActiveSession(activity, true, new StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
Bundle params = new Bundle();
params.putString("to", id);
params.putString("message", "EGrocery Invite");
WebDialog requestsDialog = (
new WebDialog.RequestsDialogBuilder(activity,
Session.getActiveSession(),
params))
.setOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(Bundle values,
FacebookException error) {
// TODO Auto-generated method stub
if (error != null) {
if (error instanceof FacebookOperationCanceledException) {
//Toast.makeText(activity, R.string.txt_invitation_cancel,
// Toast.LENGTH_SHORT).show();
} else {
// Toast.makeText(activity, R.string.txt_invitation_cancel,
// Toast.LENGTH_SHORT).show();
}
} else {
final String requestId = values.getString("request");
if (requestId != null) {
Toast.makeText(activity, "Invited Successfully",
Toast.LENGTH_SHORT).show();
} else {
// Toast.makeText(activity, R.string.txt_invitation_cancel,
// Toast.LENGTH_SHORT).show();
}
}
}
})
.build();
requestsDialog.show();
// BELOW 3 LINES ADDED BY SHAHZEB KHOWAJA.
/*if(!requestsDialog.isShowing()) {
requestsDialog.show();
}*/
}
}
});
}
public void postOnWall(final Activity activity, final String name, final String caption, final String description,
final String link, final String picture) {
Session.openActiveSession(activity, true, new StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
// TODO Auto-generated method stub
if (session.isOpened()) {
Bundle params = new Bundle();
params.putString("name", name);
params.putString("caption", caption); //"DrawWithFriends"
params.putString("description", description); //pa.getUserProfile().getFullName() + " has shared the word " + challengeQuestions.get(current_num_question).getQuestion().getWord() + " with you in prepsta"
params.putString("link", link);
params.putString("picture", picture);
WebDialog feedDialog = (
new WebDialog.FeedDialogBuilder(activity,
Session.getActiveSession(),
params))
.setOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(Bundle values,
FacebookException error) {
if (error == null) {
// When the story is posted, echo the success
// and the post Id.
final String postId = values.getString("post_id");
if (postId != null) {
/*Toast.makeText(ChallengeModeActivity.this,
"Posted story, id: "+postId,
Toast.LENGTH_SHORT).show();*/
Toast.makeText(activity, "Posted successfully",
Toast.LENGTH_SHORT).show();
} else {
// User clicked the Cancel button
//Toast.makeText(activity, R.string.txt_post_cancel,
// Toast.LENGTH_SHORT).show();
}
} else if (error instanceof FacebookOperationCanceledException) {
// User clicked the "x" button
//Toast.makeText(activity, R.string.txt_post_cancel,
// Toast.LENGTH_SHORT).show();
} else {
// Generic, ex: network error
//Toast.makeText(activity, R.string.txt_post_cancel,
// Toast.LENGTH_SHORT).show();
}
}
})
.build();
feedDialog.show();
}
}
});
}
public void getFacebookFriends(final Activity activity) {
Session.openActiveSession(activity, true, new StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
Utils.Log(Constants.LOG_I, TAG, "Facebook Session Opened");
Request friendRequest = Request.newMyFriendsRequest(session, new Request.GraphUserListCallback() {
@SuppressWarnings("unchecked")
@Override
public void onCompleted(List<GraphUser> users, Response response) {
// TODO Auto-generated method stub
if (response.getError() != null) {
Utils.Log(Constants.LOG_I,
TAG, String.format("Error making request: %s", response.getError()));
} else {
Utils.Log(Constants.LOG_D, Constants.TAG, "fb friends: " + response.toString());
((IFbCallback<List<GraphUser>, Response>)activity).onFbRequestComplete(users, response);
}
}
});
/*Bundle params = new Bundle();
params.putString("fields", "id,name,picture");
friendRequest.setParameters(params);*/
friendRequest.executeAsync();
}
}
});
}
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state, Exception exception) {
if(session.isOpened()){
Utils.Log(Constants.LOG_I, TAG, "Facebook Session Opened");
Request.newMeRequest(session, new Request.GraphUserCallback() {
@SuppressWarnings("unchecked")
@Override
public void onCompleted(GraphUser user, Response response) {
// TODO Auto-generated method stub
if (response.getError() != null) {
Utils.Log(Constants.LOG_I,
TAG, String.format("Error making request: %s", response.getError()));
} else {
((IFbCallback<GraphUser, Response>)activity).onFbRequestComplete(user, response);
}
}
}).executeAsync();
}
}
}
}
MainActivity.java
public class LoginActivity extends Activity implements OnClickListener, IFbCallback<GraphUser, Response>{
private FacebookHelper fbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
fbHelper = new FacebookHelper(this, savedInstanceState);
initControls();
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Session.getActiveSession().addCallback(fbHelper.getStatusCallback());
//googleHelper.getGoogleApiClient().connect();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Session.getActiveSession().removeCallback(fbHelper.getStatusCallback());
}
private void initControls() {
Button fbSignInBtn = (Button) findViewById(R.id.login_fb_sign_in_btn);
//listener
fbSignInBtn.setOnClickListener(this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.login_fb_sign_in_btn:
fbHelper.loginToFacebook();
break;
}
}
@Override
public void onFbRequestComplete(GraphUser graphUser, Response response) {
Utils.Log(Constants.LOG_E, Constants.TAG, response.toString());
// store values locally
String uid = graphUser.getId();
String first_name = graphUser.getFirstName();
String last_name = graphUser.getLastName();
String email = "";
if (response.toString().contains("email")) {
email = graphUser.getProperty("email").toString();
}
Log.e("MainActivity", "id: " + uid);
Log.e("MainActivity", "first name: " + first_name);
Log.e("MainActivity", "last name: " + last_name);
Log.e("MainActivity", "email: " + email);
}
}
Create and Implement interface
public interface IFbCallback<G, R> {
public void onFbRequestComplete(G graphUser, R response);
}
Add build.gradle file
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "23.0.0 rc3"
defaultConfig {
applicationId "com.dvmfashion"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.facebook.android:facebook-android-sdk:3.19.0'
}
这篇关于与Facebook的最新SDK在Android Studio中整合Facebook的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!