Im интегрируя приложение Android в приложение facebook, до сих пор мне удалось это сделать, но
без дополнительных разрешений (при регистрации) может кто-нибудь дать мне общее руководство?
Im добавляя классы, которые я использовал, чтобы сделать это -
Основной класс для выполнения всех действий, связанных на facebook деятельности -Добавление дополнительных разрешений для facebook 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) {
}
}
}
Класс Я использую для регистрации пользователя с помощью Facebook -
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();
}
}
Я нашел нить, связанную с добавлением еще несколько разрешений на facebbok loginbutton виджет
они просто кажется врезаться мое приложение ...
Пожалуйста, обратите внимание, я использую Facebook SDK версии 3.6
TNX заранее
Edit:
мне удалось добавить публикацию разрешения, заменив следующие -
loginButton.setReadPermissions (Arrays.asList ("publish_actions")) ;
by
loginButton.setPublishPermissions (Arrays.asList ("publish_actions"));
Проблема в том, что я не могу получить активного пользователя (удалив эту строку, я получаю пользователя после согласования с условиями приложения, но добавив, что GraphUser остается null ..) любая помощь ??
Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий ниже своего сообщения - вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы будете быть в состоянии [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment). – Ayush
Наоборот, это действительно объясняет решение проблемы. Не каждый ответ, который начинается с «Я тоже имел такую же проблему», является плохим - реалистично, многие люди получат решения и преодолеют ту же проблему. –
извините за ответ, но я приношу свое решение для него, может быть, это не хорошо, но я знаю только один способ исправить как мой ответ –