2013-04-16 56 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);' –