Android Gigya-通知I';我登录了Facebook

Android Gigya-通知I';我登录了Facebook,android,facebook-login,gigya,Android,Facebook Login,Gigya,回答了下面的评论: 我正在使用Gigya服务在我的客户端Android应用程序中提供社交登录。问题是Facebook必须是本地的,所以我编辑了一点数据流 第一步: 在我的AndroidManifest.xml中添加Gigya和Facebook活动: <activity android:name="com.gigya.socialize.android.ui.HostActivity" android:configChanges="keyboard|keyboardHidde

回答了下面的评论:

我正在使用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}"/>
然后在我的
logingiyawebviewfragment
中,我在
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;
        }
    }
}
公共类logingiyawebviewfragment扩展了片段{
private final static String TAG=logingiyawebviewfragment.class.getSimpleName();
私有网络视图;
私人CallbackManager CallbackManager;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment\u login\u gigya\u webview,container,false);
webView=(webView)view.findViewById(R.id.login\u gigya\u webView);
setupWebView();
webView.loadUrl(“http://www.mywebpagedomain.com/gigya/tablet.html");
返回视图;
}
私有void setupWebView(){
WebSettings WebSettings=webView.getSettings();
setJavaScriptEnabled(true);
webSettings.setSupportZoom(假);
webSettings.setAllowFileAccess(true);
webSettings.setAllowContentAccess(true);
webSettings.setDatabaseEnabled(true);
webSettings.setAppCacheEnabled(true);
webSettings.setSaveFormData(真);
setWebChromeClient(新的WebChromeClient());
setWebViewClient(新的WebViewClient(){
@凌驾
公共布尔值shouldOverrideUrlLoading(WebView WebView,字符串url){
Uri=Uri.parse(url);
字符串提供程序=uri.getQueryParameter(“x_提供程序”);
if(provider!=null&&!provider.isEmpty()){
交换机(提供程序){
案例“facebook”:
webView.stopLoading();
makeFacebookStuff();
返回false;
违约:
返回GSWebBridge.handleUrl(webView,url);
}
}
返回false;
}
});
附加(getActivity(),webView,新的GSWebBridgeListener()){
@凌驾
登录前公共无效(WebView WebView,GSLoginRequest.LoginRequestType requestType,GSObject参数){
Log.d(标记“登录前”);
}
@凌驾
public void onLoginResponse(WebView WebView、GSResponse){
Log.d(标签“onLoginResponse”);
}
@凌驾
public void onPlugineEvent(WebView WebView、GSObject GSObject、字符串s){
Log.d(标签“onPluginEvent”);
}
});
}
私有void makeFacebookStuff(){
FacebookSdk.sdkinInitialize(this.getContext().getApplicationContext());
setApplicationId(AppConfig.getInstance().getFacebookAppId());
LoginManager.getInstance().setLoginBehavior(LoginBehavior.NATIVE_,带_回退);
callbackManager=callbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
Log.d(“Facebook”,loginResult.toString());
}
@凌驾
公开作废{
Log.d(“Facebook”、“onCancel”);
}
@凌驾
public void onError(facebook异常错误){
Log.d(“Facebook”,error.toString());
}
});
LoginManager.getInstance().logInWithReadPermissions(这是,Arrays.asList(“public_profile”,“email”));
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
if(GSAPI.getInstance().handleAndroidPermissionsResult(请求代码、权限、GrantResult)){
返回;
}
}
}
问题是,即使Facebook登录成功,我也不知道如何通知Gigya这件事。我一直在考虑的另一个解决方案是使用Facebook用户名或Facebook电子邮件手动登录Gigya,但我不知道如何做到这一点


有什么建议吗?

支持Facebook本机登录。为了使用Gigya的Facebook本机登录,您需要将Facebook Android SDK作为依赖项安装到您的应用程序中并重新编译。您可以在此处看到详细说明:

很抱歉,缺少代码。我从一开始就对它进行了更新。奥斯卡,很遗憾,你不能在Gigya SDK上添加本机登录。当您按照上述链接所述安装Gigya SDK和Facebook SDK时;Facebook本机登录被直接添加到Gigya登录中,因此当用户点击Facebook链接时,他们会自动被引导到本机登录——并且Gigya会话将在无需任何额外努力的情况下启动(在成功登录后)。不支持以任何其他方式实现此功能,因为要支持本机登录,必须在Gigya SDK内部的构建时进行配置。啊,好的。理解。所以我想我的下一个任务是考虑如何更改我的登录名
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;
        }
    }
}