2017-05-03 38 views
0

回答下面的評論:Gigya - Notify I've logged wih Facebook的Gigya - 通知我登錄Facebook的王氏

我使用的Gigya服務,提供社會登錄我的客戶端Android應用程序。問題是Facebook必須是本地的,所以我編輯了一些數據流。

第一步: 添加到我AndroidManifest.xml的的Gigya和Facebook活動:

<activity 
    android:name="com.gigya.socialize.android.ui.HostActivity" 
    android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" 
    android:theme="@android:style/Theme.Translucent.NoTitleBar" /> 
<activity 
    android:name="com.gigya.socialize.android.login.providers.WebLoginActivity" 
    android:theme="@android:style/Theme.Translucent.NoTitleBar" 
    android:launchMode="singleTask" 
    android:allowTaskReparenting="true" > 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.BROWSABLE" /> 
     <data android:scheme="com.company.appname" android:host="gsapi" /> 
    </intent-filter> 
</activity> 
<activity android:name="com.facebook.FacebookActivity" 
    android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" 
    android:theme="@android:style/Theme.Translucent.NoTitleBar" 
    android:label="@string/app_name" /> 
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="{myFacebookAppId}"/> 

之後,在我的MainActivity.java我初始化的Gigya:

GSAPI.getInstance().initialize(MainActivity.this, gigyaApiKey, gigyaServer); 
GSAPI.getInstance().setSocializeEventListener(new GigyaSocializeListener(MainActivity.this)); 
GSAPI.getInstance().setAccountsEventListener(new GigyaAccountsListener()); 

然後在我的LoginGigyaWebViewFragment我加載一個WebView一個URL,其中是Gigya webView(電子郵件和密碼EditText和社交插件),攔截請求url並執行本地Facebook登錄。

public class LoginGigyaWebViewFragment extends Fragment { 

    private final static String TAG = LoginGigyaWebViewFragment.class.getSimpleName(); 

    private WebView webView; 
    private CallbackManager callbackManager; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_login_gigya_webview, container, false); 
     webView = (WebView) view.findViewById(R.id.login_gigya_webView); 
     setupWebView(); 
     webView.loadUrl("http://www.mywebpagedomain.com/gigya/tablet.html"); 
     return view; 
    } 

    private void setupWebView() { 
     WebSettings webSettings = webView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setSupportZoom(false); 
     webSettings.setAllowFileAccess(true); 
     webSettings.setAllowContentAccess(true); 
     webSettings.setDatabaseEnabled(true); 
     webSettings.setAppCacheEnabled(true); 
     webSettings.setSaveFormData(true); 

     webView.setWebChromeClient(new WebChromeClient()); 

     webView.setWebViewClient(new WebViewClient() {    
      @Override 
      public boolean shouldOverrideUrlLoading(WebView webView, String url) { 
       Uri uri = Uri.parse(url); 
       String provider = uri.getQueryParameter("x_provider"); 
       if (provider != null && !provider.isEmpty()) { 
        switch (provider) { 
         case "facebook": 
          webView.stopLoading(); 
          makeFacebookStuff(); 
          return false; 
         default: 
          return GSWebBridge.handleUrl(webView, url); 
        } 
       } 
       return false; 
      } 
     }); 
     GSWebBridge.attach(getActivity(), webView, new GSWebBridgeListener() { 
      @Override 
      public void beforeLogin(WebView webView, GSLoginRequest.LoginRequestType requestType, GSObject params) { 
       Log.d(TAG, "beforeLogin"); 
      } 

      @Override 
      public void onLoginResponse(WebView webView, GSResponse response) { 
       Log.d(TAG, "onLoginResponse"); 
      } 

      @Override 
      public void onPluginEvent(WebView webView, GSObject gsObject, String s) { 
       Log.d(TAG, "onPluginEvent"); 
      } 
     }); 
    } 

    private void makeFacebookStuff() { 
     FacebookSdk.sdkInitialize(this.getContext().getApplicationContext()); 
     FacebookSdk.setApplicationId(AppConfig.getInstance().getFacebookAppId()); 
     LoginManager.getInstance().setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK); 
     callbackManager = CallbackManager.Factory.create(); 

     LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       Log.d("Facebook", loginResult.toString()); 
      } 

      @Override 
      public void onCancel() { 
       Log.d("Facebook", "onCancel"); 
      } 

      @Override 
      public void onError(FacebookException error) { 
       Log.d("Facebook", error.toString()); 
      } 
     }); 
     LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email")); 
    } 

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

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     if (GSAPI.getInstance().handleAndroidPermissionsResult(requestCode, permissions, grantResults)) { 
      return; 
     } 
    } 
} 

問題是,即使Facebook登錄成功,我不知道如何通知Gigya發生了。我一直在想的另一個解決方案是使用Facebook userId或Facebook電子郵件手動登錄Gigya,但我不知道該怎麼做。

有什麼建議嗎?

回答

0

支持Facebook本地登錄。爲了在Gigya中使用Facebook本地登錄,您需要將Android的Facebook SDK作爲依賴項安裝到您的應用中,並重新編譯它。你可以在這裏看到詳細的說明:http://developers.gigya.com/display/GD/Android#Android-AddingFacebookNativeLogin

+0

對不起,缺少代碼。我從一開始就更新了它。 –

+1

奧斯卡,不幸的是,你不能在Gigya SDK的頂部添加本地登錄。按照上述鏈接中的說明安裝Gigya SDK和Facebook SDK; Facebook本地登錄直接添加到Gigya登錄中,所以當用戶點擊Facebook鏈接時,它們會自動定向到本地登錄 - 並且無需任何額外的努力即可啓動Gigya會話(登錄成功後)。試圖以任何其他方式實現這一點不被支持,爲了支持本地登錄,它必須在構建時在Gigya SDK內進行配置。 – Levi

+0

啊,好的。瞭解。所以我想我的下一個任務是考慮如何在我使用Facebook登錄時自動更改登錄屏幕以及如何訪問Gigya數據。非常感謝你! –