안드로이드 애플 리케이션을 페이스 북 응용 프로그램과 통합했는데, 지금까지 그랬지만 로그인 할 때 추가 권한없이
누군가 나에게 일반적인 지침을 줄 수 있습니까?더 많은 권한을 페이스 북에 추가합니다. LoginButton
public abstract class FacebookActivity extends Activity {
// Class variables
protected GraphUser mFacebookUser;
protected UiLifecycleHelper mUiHelper;
protected SessionState mSessionState;
protected Session mSession;
protected Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state,
Exception exception) {
onSessionStateChange(session, state, exception);
}
};
protected FacebookDialog.Callback dialogCallback = new FacebookDialog.Callback() {
@Override
public void onError(FacebookDialog.PendingCall pendingCall,
Exception error, Bundle data) {
Log.d("FacebookActivity",
String.format("Error: %s", error.toString()));
}
@Override
public void onComplete(FacebookDialog.PendingCall pendingCall,
Bundle data) {
Log.d("FacebookActivity", "Success!");
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initFacebookUser(savedInstanceState);
mUiHelper = new UiLifecycleHelper(this, callback);
mUiHelper.onCreate(savedInstanceState);
setContentView(setActivityLayout());
InitiateUIComponents(savedInstanceState);
}
@Override
protected void onResume() {
super.onResume();
mUiHelper.onResume();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mUiHelper.onSaveInstanceState(outState);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mUiHelper.onActivityResult(requestCode, resultCode, data,
dialogCallback);
}
@Override
public void onPause() {
super.onPause();
mUiHelper.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
mUiHelper.onDestroy();
}
protected void onSessionStateChange(Session session, SessionState state,
Exception exception) {
this.mSessionState = state;
this.mSession = session;
}
private void initFacebookUser(Bundle bundle) {
if (mFacebookUser == null) {
GetUserAsync task = new GetUserAsync();
task.execute(new Bundle[] { bundle });
}
}
protected void postStatusUpdate(String message) {
if (mFacebookUser != null && hasPublishPermission()) {
Request request = Request.newStatusUpdateRequest(
Session.getActiveSession(), message, null, null,
new Request.Callback() {
@Override
public void onCompleted(Response response) {
doOnStatusUpdate(response.getGraphObject(),
response.getError());
}
});
request.executeAsync();
}
}
protected boolean hasPublishPermission() {
Session session = Session.getActiveSession();
return session != null
&& session.getPermissions().contains("publish_actions");
}
public GraphUser getFacebookUser(Bundle bundle) {
// Method variables
Session session;
Request request;
Response response;
GraphUser sessionUser;
session = Session.getActiveSession();
// If the session is null try and create a new session
if (session == null) {
if (bundle != null) {
session = Session.restoreSession(this, null, callback, bundle);
}
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(callback));
}
}
request = new Request(session, "me", null, HttpMethod.GET);
response = request.executeAndWait();
if (response.getError() != null) {
// bla bla
} else {
sessionUser = response.getGraphObjectAs(GraphUser.class);
if (sessionUser != null) {
return sessionUser;
}
}
// If no user has been fetched
return null;
}
/**
* This method is used to set the activity layout to use simply return the
* layout resource id (as R.layout.layout_resouce_id)
*
* @return The address to the layout resource id
*/
protected abstract int setActivityLayout();
/**
* This method injects the instantiation of the UI components to the built
* in Android onCreate activity
*/
protected abstract void InitiateUIComponents(Bundle bundle);
/**
* This method handle the action to be taken after a status update (toast,
* notify, etc.) In order to do nothing simply leave it empty Note - The
* given parameters are simply passed on runtime
*
* @param result
* - The post request result
* @param error
* - The facebook request error
*/
protected abstract void doOnStatusUpdate(GraphObject result,
FacebookRequestError error);
private class GetUserAsync extends AsyncTask<Bundle, Void, Void> {
@Override
protected Void doInBackground(Bundle... bundle) {
mFacebookUser = getFacebookUser(bundle[0]);
return null;
}
@Override
protected void onPostExecute(Void input) {
}
}
}
클래스 나 페이스 북을 사용하여 사용자를 등록하는 데 사용하고 - -
메인 클래스는 페이스 북의 활동에 관련된 모든 작업을 처리 할 수 - 내가 그렇게하는 데 사용되는 클래스를 추가
임
public class ActivityRegister extends FacebookActivity {
// Class variables
private String name;
private String email;
private String password;
private EditText editTextName;
private EditText editTextEmail;
private EditText editTextPassword;
private Intent intent;
private UserFunctions user;
private Button btnRegister;
private LoginButton loginButton;
private boolean isValid;
@Override
protected int setActivityLayout() {
return R.layout.activity_register_screen;
}
/**
* A method to validate user given details
*
* @return True in case all the details are ok false otherwise
*/
private boolean validateUserDetails(String name, String email,
String password) {
return false;
}
@Override
protected void doOnStatusUpdate(GraphObject result,
FacebookRequestError error) {
}
@Override
protected void InitiateUIComponents(Bundle bundle) {
user = new UserFunctions();
btnRegister = (Button) findViewById(R.id.registerBtnRegister);
btnRegister.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// get the data out of the fields
editTextName = (EditText) findViewById(R.id.registerName);
editTextEmail = (EditText) findViewById(R.id.registerEmail);
editTextPassword = (EditText) findViewById(R.id.registerPassword);
// get the text out of the edit text objects
name = editTextName.getText().toString();
email = editTextEmail.getText().toString();
password = editTextPassword.getText().toString();
isValid = validateUserDetails(name, email, password);
if (isValid) {
user.RegisterUser(name, name, email, password);
} else {
gotoNextScreen();
}
}
});
loginButton = (LoginButton) findViewById(R.id.facebook_login_button);
loginButton.setReadPermissions(Arrays.asList("publish_actions"));
loginButton
.setUserInfoChangedCallback(new LoginButton.UserInfoChangedCallback() {
@Override
public void onUserInfoFetched(GraphUser user) {
ActivityRegister.this.mFacebookUser = user;
if (mFacebookUser != null) {
gotoNextScreen();
}
}
});
}
private void gotoNextScreen() {
intent = new Intent(ActivityRegister.this, ActivityUUID.class);
startActivity(intent);
finish();
}
}
나는 ... 0 그들은 단지 내 응용 프로그램 충돌하는 것 facebbok loginbutton 위젯
에 좀 더 많은 권한을 추가로 관련 스레드를 발견 않았다내가 사전에 페이스 북 SDK 버전 3.6
TNX을 사용하고 있습니다
편집 :
내가 다음 교체하여 사용 권한을 게시 추가 관리 -() "publish_actions"(Arrays.asList를)
loginButton.setReadPermissions을 ;
by
loginButton.setPublishPermissions (Arrays.asList ("publish_actions"));
문제는 현재 활성 사용자를 얻지 못했습니다 (해당 선을 제거하면 앱 조건에 동의 한 후 사용자를 얻지 만 GraphUser를 null로 추가하면 문제가 생깁니다).
이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남기십시오. 자신의 게시물에 언제나 댓글을 달 수 있으며 충분한 [평판] (http://stackoverflow.com/help/whats-reputation)을 갖게되면 [모든 게시물에 댓글을 달 수] 있어야합니다 (http://stackoverflow.com/help/privileges/comment). – Ayush
반대로 이것은 실제로 문제에 대한 해결책을 설명하는 것으로 보입니다. "나는 똑같은 문제가있다"로 시작하는 모든 대답이 나쁘지는 않습니다 - 현실적으로, 많은 해결책은 ** 같은 문제를 직면하고 ** 극복 한 사람들에게서 나올 것입니다. –
회신에 대해 미안하지만 그를 위해 내 솔루션을 가져올 수 있습니다. 아마도 좋지는 않지만 단지 내 대답으로 해결할 수있는 유일한 방법을 알고 있습니다. –