2013-12-23 4 views
0

Android 응용 프로그램에 "Facebook에서 로그인"을 구현하려고 했으므로 Facebook Developers 사이트에서 설명한 모든 단계를 수행했습니다. 내 코드는 다음과 같습니다android 응용 프로그램의 Facebook 계정으로 로그인 할 때 문제가 발생했습니다.

MainActivity.java

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.LoggingBehavior; 
import com.facebook.Request; 
import com.facebook.Response; 
import com.facebook.Session; 
import com.facebook.SessionState; 
import com.facebook.Settings; 
import com.facebook.model.GraphUser; 

public class MainActivity extends Activity { 

private static final String URL_PREFIX_FRIENDS = "https://graph.facebook.com/me/friends?access_token="; 
private TextView textInstructionsOrLink; 

Button mButton; 
private Session.StatusCallback statusCallback = new SessionStatusCallback(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 
    mButton=(Button)findViewById(R.id.button1); 
    textInstructionsOrLink=(TextView)findViewById(R.id.tex); 

    Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); 

    Session session = Session.getActiveSession(); 
    if (session == null) { 
     if (savedInstanceState != null) { 
      session = Session.restoreSession(this, null, statusCallback, savedInstanceState); 
     } 
     if (session == null) { 
      session = new Session(this); 
     } 
     Session.setActiveSession(session); 
     if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { 
      session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback)); 
     } 
    } 
    updateView(); 
} 
private void updateView() { 
    Session session = Session.getActiveSession(); 
    if (session.isOpened()) { 
     if (session.isOpened()) { 

      // make request to the /me API 
      Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 

       // callback after Graph API response with user object 
       @Override 
       public void onCompleted(GraphUser user, Response response) { 
       if (user != null) { 

        System.out.println("Name " + user.getName()); 
        textInstructionsOrLink.setText("Hello " + user.getName() + "!"); 
       } 
       } 
      }); 
      } 
     mButton.setText("Logout"); 
     mButton.setOnClickListener(new OnClickListener() { 
     public void onClick(View view) { onClickLogout(); } 
     }); 
    } 
    else { 
    textInstructionsOrLink.setText("Intri"); 
    mButton.setText("Login"); 
    mButton.setOnClickListener(new OnClickListener() { 
    public void onClick(View view) { onClickLogin(); } 
    }); 
    } 
} 
private void onClickLogin() { 
    Session session = Session.getActiveSession(); 
    if (!session.isOpened() && !session.isClosed()) { 
     session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback)); 
    } else { 
     Session.openActiveSession(this, true,statusCallback); 
    } 
} 

private void onClickLogout() { 
    Session session = Session.getActiveSession(); 
    if (!session.isClosed()) { 
     session.closeAndClearTokenInformation(); 
    } 
} 

private class SessionStatusCallback implements Session.StatusCallback { 
    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
     updateView(); 
    } 
} 
@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 
} 

} 

내 Manifest.xml은 다음과 같다;

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.fbtest" 
android:versionCode="1" 
android:versionName="1.0" > 
<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="18" /> 
<uses-permission android:name="android.permission.INTERNET" />  
<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.fbtest.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> 
    <meta-data 
    android:name="com.facebook.sdk.ApplicationId" 
    android:value="@string/app_id" /> 

    <activity android:name="com.facebook.LoginActivity" /> 
    </application> 
</manifest> 

위의 코드는 에뮬레이터에서 잘 작동하지만 실제 장치에서 작동하지 않습니다. 로그인 후 버튼 텍스트가 "로그 아웃"으로 변경되지 않으며 사용자 이름이 제대로 표시되지 않습니다. 그것을 해결하도록 도와 줄 수 있습니까? 내가 그것을 실행 내 시스템 hashkey 값을 변경할 때

+0

당신의 Session.StatusCallback에서 "예외"필드를 인쇄 해보십시오. –

답변

0

나는 내가 다른 HAskkey 값을 위의 코드 실행 문제를 해결 미세

관련 문제