Получить сообщения профиля Facebook (статус) на Android - PullRequest
0 голосов
/ 03 мая 2018

Я новичок в разработке для Android и Java и пытаюсь найти способ извлечения сообщений профиля текущего пользователя и сохранения его в текстовом файле на моем смартфоне для дальнейших процессов.

Я могу получить имя пользователя, адрес электронной почты, пол, возраст и день рождения. пока все работает нормально, и текстовый файл пишется, когда Facebook подключен к моему приложению.

Ниже приведен класс, как его кодируют для извлечения упомянутых данных. Если кто-то знает, как извлекать сообщения также с помощью этого метода, пожалуйста, предложите?

Спасибо!

package com.example.daunte_pc.anique;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MenuItem;
import android.widget.Toast;

import com.facebook.AccessToken;
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.LoginResult;
import com.facebook.login.widget.LoginButton;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.File;
import java.io.FileWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;


public class SocialActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{
    private static final String TAG = "SocialActivity";
    LoginButton loginButton;
    CallbackManager callbackManager;
    ProgressDialog progressDialog;
    URL profile_pic;
    String id;
    DrawerLayout drawerLayout;
    ActionBarDrawerToggle actionBarDrawerToggle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_social);

        drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
        actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.open,R.string.close);
        drawerLayout.addDrawerListener(actionBarDrawerToggle);
        NavigationView navigationView = (NavigationView)findViewById(R.id.navigation);
        actionBarDrawerToggle.syncState();
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        navigationView.setNavigationItemSelectedListener(this);

        FacebookSdk.sdkInitialize(getApplicationContext());
        loginButton = (LoginButton)findViewById(R.id.login_button);
        callbackManager = CallbackManager.Factory.create();
        loginButton.setReadPermissions(Arrays.asList("public_profile", "email", "user_birthday", "user_status","user_posts"));


        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(final LoginResult loginResult) {
                progressDialog = new ProgressDialog(SocialActivity.this);
                progressDialog.setMessage("Please Wait! Anique_Profile's being processed!");
                progressDialog.show();
                String accessToken = loginResult.getAccessToken().getToken();
                Log.i("accessToken",accessToken);



                GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {
                        Log.i("Test",response.toString());

                        Bundle bFacebookData = getFacebookData(object);
                        String name = bFacebookData.getString( "name");
                        String email = bFacebookData.getString( "email");
                        String gender = bFacebookData.getString( "gender");
                        String profilepic = bFacebookData.getString( "profile_pic");
                        String age_range = bFacebookData.getString( "age_range");
                        String birthday = bFacebookData.getString( "birthday");
                        String posts = bFacebookData.getString( "posts{message}");



                        Intent in = new Intent(SocialActivity.this, Facebook_Profile.class);
                        in.putExtra("name", name);
                        in.putExtra("email", email);
                        in.putExtra("gender", gender);
                        in.putExtra("Image", profilepic);
                        in.putExtra("posts", posts);

                        startActivity(in);

                        try{
                            File root = new File(Environment.getExternalStorageDirectory(),"Anique Text Files");
                            if (! root.exists()){
                                root.mkdir();
                            }

                            File filePath = new File(root, "myFile.txt");
                            FileWriter writer = new FileWriter(filePath);
                            writer.append("Name : "+ name+"\n");
                            writer.append("\n");
                            writer.append("Email : "+ email+"\n");
                            writer.append("\n");
                            writer.append("Gender : "+ gender+"\n");
                            writer.append("\n");
                            writer.append("Age : "+ age_range+"\n");
                            writer.append("\n");
                            writer.append("Birthday : "+ birthday+"\n");
                            writer.append("\n");
                            writer.append("Posts : "+ posts+"\n");
                            writer.append("\n");
                            writer.flush();
                            writer.close();
                            Toast.makeText(SocialActivity.this,"Success!! Logged into Anique_Profile as per given user information. ",Toast.LENGTH_LONG).show();
                            Toast.makeText(SocialActivity.this, "Data is Written!", Toast.LENGTH_LONG).show();
                        }catch (Exception ex){
                            ex.printStackTrace();
                        }

                        progressDialog.hide();
                        finish();
                    }
                });

                Bundle params = new Bundle();
                params.putString("fields", "id, name, email, gender, age_range, birthday, posts, feed");
                request.setParameters(params);
                request.executeAsync();
            }


            @Override
            public void onCancel() {
            }

            @Override
            public void onError(FacebookException error) {
            }
        });
    }

    private Bundle getFacebookData(JSONObject object) {

        Bundle bundle = new Bundle();
        try{
            id = object.getString("id");
            profile_pic = new URL("https://graph.facebook.com/" + id + "/picture?width=200&height=200");
            Log.i("profile_pic", profile_pic +"");
            bundle.putString("profile_pic",profile_pic.toString());
        }catch (JSONException ex){
            ex.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        bundle.putString("idFacebook",id);

        if(object.has("name")){
            try{
                bundle.putString("name", object.getString("name"));
            }catch (JSONException ex){
                ex.printStackTrace();
            }
        }

        if(object.has("email")){
            try{
                bundle.putString("email", object.getString("email"));
            }catch (JSONException ex){
                ex.printStackTrace();
            }
        }

        if(object.has("gender")){
            try{
                bundle.putString("gender", object.getString("gender"));
            }catch (JSONException ex){
                ex.printStackTrace();
            }
        }

        if(object.has("age_range")){
            try{
                bundle.putString("age_range", object.getString("age_range"));
            }catch (JSONException ex){
                ex.printStackTrace();
            }
        }

        if(object.has("birthday")){
            try{
                bundle.putString("birthday", object.getString("birthday"));
            }catch (JSONException ex){
                ex.printStackTrace();
            }
        }

        if(object.has("posts")){
            try{
                bundle.putString("posts", object.getString("posts"));
            }catch (JSONException ex){
                ex.printStackTrace();
            }
        }


        return bundle;
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }

}

1 Ответ

0 голосов
/ 07 мая 2018

Я хочу получить текущие статусы профиля пользователя для отлова определенных ключевых слов, чтобы что-то предсказать. Там нет возражений в отображении сообщений для пользователя в моем приложении. Но это не кажется неуместным, так как здесь происходит предсказание.

Вам нужно что-то сделать с данными, которые более или менее непосредственно приносят пользу «в приложении» пользователя… Facebook не одобрит это при рассмотрении, если единственной целью является фоновый анализ данных, которые не имеет прямой связи с пользовательским интерфейсом.

Разрешение, необходимое для чтения сообщений пользователя, будет user_posts, но в документации это указано как один из неприменимых вариантов использования:

Невидимое использование этих данных, например анализ настроений или защита от спам-ботов.

https://developers.facebook.com/docs/facebook-login/permissions/v3.0#reference-user_posts

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...