2013-04-16 54 views
3

我正在开发一款使用Gigya的Android应用程序,允许用户使用Facebook和Twitter注册;与此同时,另一位开发人员在iOS中做同样的事情。我们想要实现自定义登录界面。Gigya在手机应用程序中的自定义登录UI登录流程

标准方法使用的Gigya自己的UI,并记录在这里:下方

http://developers.gigya.com/035_Mobile_SDKs/020_Android#Logging_in_the_User

,它只是表明:

If you wish to implement the graphic design by yourself, use the login method instead.

标准的登录方法调用一个专用的登录后回调函数方法和所有后续流程都被描述为源于此事件。其他登录方法调用标准的onGSResponse(...)回调;目前尚不清楚如何使用响应来构建用户,因此我设置了我的实现以致电socialize.getUserInfo。试图调用这两种方法都会导致很多不寻常的错误。

按照该指令的Gigya我开始了

mGSAPI = new GSAPI(GIGYA_APP_KEY, this); 
mGSAPI.setAPIDomain("eu1.gigya.com"); 

onCreate(...)(其中GIGYA_APP_KEY是从我们的控制台复制的值)。我打电话给setAPIDomain是因为我们得到了一个无效的数据中心错误(尽管有500001代码,而不是301001代码!),这已经修复了。

Facebook登录按照我的预期经历登录流程,然后返回错误400093(文档告诉我的是一个无效的API参数,并且具有消息“Missing parameter:client_id”)。

Twitter的登录回来了206002,“帐户待验证”,这似乎是有道理的;然后我打电话

mGSAPI.sendRequest(
     "getUserInfo", 
     null, //parameters 
     true, //use HTTPS 
     this, //the callback 
     null //a context object 
); 

,这给我的错误:

Missing required parameter: No secret or signature were provided. Request could not be verified.

The documentation for socialize.getUserInfo提出一个UID所需的网络应用程序,而不是本地的。它没有提到其他强制性领域。我有点卡住......不应该GSAPI对象处理验证,因为它是用API密钥初始化的?

回答

1

我可以给你一个方向,在很高的水平上集成GIGYA。 (下面的代码不是逐字的)希望它有些帮助。

为我创造了一个Manager对象(GigyaManager),其保持了GSAPI对象的单一实例的私人Android应用程序。

这单GigyaManager在我的应用程序对象初始化:

public static GigyaManager getInstance(String apiKey, Context context) { 
    mGSAPI = new GSAPI(apiKey, context); 
} 

我GigyaManager类也有用于处理登录瓦特/社会服务的包装方法:

public void loginWithSocialService(GigyaSocialProvider provider, GSResponseListener listener) throws Exception { 
     // did the user attempt a social login, and bail out on the registration 
     // phase? 
     if (GigyaManager.getInstance().getGSAPI().getSession() != null) { 
      logout(); 
     } 


     GSObject providerArgs = new GSObject(); 
     providerArgs.put(GigyaManager.GIGYA_ARG_PROVIDER, provider.name().toLowerCase()); 

     mGSAPI.login(providerArgs, listener, null); 
    } 

这是从一个发射包含“登录”按钮的片段中的onClick监听器:

GigyaManager.getInstance("appKey", getActivity()).loginWithSocialService(GigyaSocialProvider.FACEBOOK, this); 

该片段不得不实施GSResponseListener具有回调处理登录是否成功与否:

@Override 
public void onGSResponse(String method, GSResponse response, Object context) { 
    if (!method.equalsIgnoreCase("login") || response.getErrorCode() != 0) { 
     return; 
    } 
    GIGYAResponseWrapper resp = new GIGYAResponseWrapper(response.getResponseText()); 

    // user is attached to login provider? 
    if (resp.isIsAttached()) { 
     // start some sort of loader or asynctask to get information about user account 
     // connected to GIGYA social login 

     Bundle args = new Bundle(); 
     args.putString(ARG_UID, resp.getUid()); 
     args.putString(ARG_UID_SIGNATURE, resp.getUidSignature()); 
     args.putString(ARG_SIGNATURE_TIMESTAMP, resp.getSignatureTimestamp()); 
     args.putString(ARG_SOCIAL_NICKNAME, resp.getNickname()); 

    } else { 
     // login success, but this social account is not associated with anything in GIGYA 
    } 
} 
+0

您好,感谢,这是非常有益的,但它的不幸非常接近我有什么了。据我了解,我从Facebook获得的400093错误是由于使用单点登录引起的,但我已将Facebook应用设置为好像用于SSO,并且我的登录代码还包含\t \t \t \t'GSObject params = new GSObject( ); \t \t \t \t params.put(GIGYA_PROVIDER,mProvider); \t \t \t \t如果(mProvider.equals( “脸谱”)){ \t \t \t \t \t params.put( “facebookAppId”, “APPID HERE”); \t \t \t \t} \t \t \t \t mGSAPI.login( \t \t \t \t \t \t参数,可以 \t \t \t \t \t \t mResponseListener, \t \t \t \t \t \t NULL);' –