Przejdź do strony aplikacji Facebook po uwierzytelnieniu za pomocą logowania pojedynczego
Pracuję nad aplikacją, w której muszę zintegrować funkcjonalność społecznościową Facebooka.
Chcę użyć funkcji SSO (Single Sign On), a gdy użytkownik naciśnie przycisk w mojej aplikacji, otworzy się przeglądarka internetowa i pokaże mu moją stronę aplikacji na Facebooku, po uwierzytelnieniu użytkownika, a teraz może zrobić to z innych rzeczy jako uwierzytelniony użytkownik.
Pobrałem SDK Facebooka i uwzględniłem go w moim projekcie, podpisałem też aplikację na stronie programistów Facebooka i otrzymałem APP-ID.
Tak wygląda mój kod do tej pory:
public class WebViewLike extends Activity {
private static final String TAG = "WebViewLike";
public static final String APP_ID = "1222222";
private Facebook facebook = new Facebook(APP_ID);
private WebView webView;
private Activity myActivity;
private final class WallWebChromeClient extends WebChromeClient {
public void onProgressChanged(WebView view, int progress)
{
myActivity.setTitle("Loading...");
myActivity.setProgress(progress * 100);
if(progress == 100)
myActivity.setTitle(R.string.app_name);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.view_weblike);
myActivity = this;
facebook.authorize(this, new DialogListener() {
@Override
public void onComplete(Bundle values) {
Log.d(TAG, "onComplete");
Log.d(TAG, "facebook.getAccessToken() " + facebook.getAccessToken());
Log.d(TAG, "facebook.getAccessExpires() " + facebook.getAccessExpires());
//Load the given URL
webView.loadUrl(getFacebookWallUrl());
}
@Override
public void onFacebookError(FacebookError error) {Log.d(TAG, "onComplete");}
@Override
public void onError(DialogError e) {Log.d(TAG, "onComplete");}
@Override
public void onCancel() {Log.d(TAG, "onComplete");}
});
initWebView();
}
private void initWebView() {
webView = (WebView) findViewById( R.id.likeWebView );
final WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setJavaScriptEnabled(true);
webSettings.setBuiltInZoomControls(false);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setHorizontalScrollBarEnabled(false);
webView.setWebChromeClient(new WallWebChromeClient());
}
private String getFacebookWallUrl() {
Log.d(TAG, "facebook.getAccessToken() != null");
String wallUrl = "http://www.facebook.com/plugins/login.php?" + "href="
+ URLEncoder.encode("http://www.facebook.com/MyAppPage") + "&access_token="
+ URLEncoder.encode(facebook.getAccessToken());
Log.d(TAG, "wallUrl " + wallUrl);
return wallUrl;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult");
facebook.authorizeCallback(requestCode, resultCode, data);
}
}
Na razie, gdy naciskam przycisk, przechodzę do nowego działania, które mówi, że mam już autoryzację, co oznacza, że SSO działa dobrze. Problem polega na tym, że gdy nacisnę przycisk OK, tak jak powiedziałem, chcę przejść na stronę aplikacji, ale wszystkie rzeczy, które próbowałem, pokazują mi stronę aplikacji na Facebooku, ale prosi mnie o ponowne zalogowanie. Z mojego punktu widzenia muszę zmienić początekwallUrl
ciąg wgetFacebookWallUrl()
metoda, ale nie mogę znaleźć żadnych informacji na jej temat.
Czy to możliwe?