안드로이드 페이스북 로그인 정보를 메인엑티비티로 전달하는 방법...

조회수 4219회
package flug.com.afeel;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

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.Profile;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Created by Pc on 2016-02-04.
 */
public class FBLoginActivity extends Activity {
    // Custom button
    private static final String TAG_CANCEL = "FACEBOOK LOGIN";
    private Button fbbutton;
    private Button hombtn;
    public String str_email;
    public String str_id;
    public String str_firstname;
    public String str_lastname;
    public Data data;
    public String email2;
    // Creating Facebook CallbackManager Value
    public CallbackManager callbackmanager;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Initialize SDK before setContentView(Layout ID)
        FacebookSdk.sdkInitialize(getApplicationContext());
        setContentView(R.layout.layout_common_facebook_login);
        callbackmanager = CallbackManager.Factory.create();

        // Initialize layout button
        fbbutton = (Button) findViewById(R.id.login_button);

        fbbutton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                LoginManager.getInstance().registerCallback(callbackmanager, new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        // App code
                        GraphRequest request = GraphRequest.newMeRequest(
                                loginResult.getAccessToken(),
                                new GraphRequest.GraphJSONObjectCallback() {
                                    @Override
                                    public void onCompleted(
                                            JSONObject object,
                                            GraphResponse response) {
                                        // Application code
                                        Log.v("LoginActivity", response.toString());
                                    }
                                });
                        Bundle parameters = new Bundle();
                        parameters.putString("fields", "id,name,email,gender, birthday");
                        request.setParameters(parameters);
                        request.executeAsync();
                        **// 성공시 반환되는 값을 웹뷰로....**
                    }

                    @Override
                    public void onCancel() {
                        // not called
                        Log.d("fb_login_sdk", "callback cancel");
                    }

                    @Override
                    public void onError(FacebookException e) {
                        // not called
                        Log.d("fb_login_sdk", "callback onError");
                    }
                });
            }
        });

        hombtn = (Button) findViewById(R.id.fbhome_btn);
        hombtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(FBLoginActivity.this, MainActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }

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

안드로이드 페이스북 로그인을 구현했습니다. 웹뷰에서 스크립트로 페이스북 로그인이 안되서 앱에서 로그인후 웹으로 값을 전달해 로그인을 시켜 주고 싶은데 앱에서 로그인한 정보를 웹뷰로 전다할 수 있는 방법을 모르겠습니다. 이것때문에 잠도 못자고 ㅠㅠ 저 onSuccess 부분에서 메인엑티비티로 이메일 정보만 넘기고 싶은데 어떻게 해야될까요 ??ㅜㅜ

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 안드로이드 webview에 javascript function을 만들고 그걸 호출하는 방법이 있습니다.

    javascript에 function을 이렇게 만들어 놓으세요.

    function emailUpdate(email){
         //email을 이용한 작업을 하세요.
    }
    

    안드로이드 코드를 보니 onSucces에서 다시 GraphRequest를 하네요. 그럼 그 GraphRequest의 onCompleted에서 email을 얻어올수 있을건데요. onCompleted 내부에서 이렇게 하면 될 것 같습니다.

    String  email=object.getString("email");
    //findViewById등의 방법으로 webView를 알고 있다고 가정하면
    webView.loadUrl( "javascript:emailUpdate('"+email+"')" );
    
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)