3

Facebook や Twitter を使用して登録できるように、Gigya を使用して Android アプリを開発しています。並行して、別の開発者が iOS で同じことを行っています。カスタム ログイン UI を実装したいと考えています。

標準的な方法は、Gigya 独自の UI を使用し、次のドキュメントに記載されています。

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

その下では、次のように単純に提案されています。

グラフィックデザインを自分で実装したい場合は、代わりにloginメソッドを使用してください。

標準のログイン メソッドは、メソッドを使用して専用のログイン後コールバックを呼び出しますonLogin(...)。後続のすべてのフローは、このイベントから発生するものとして記述されます。もう 1 つのログイン メソッドは、標準のonGSResponse(...)コールバックを呼び出します。応答を使用してユーザーを構築する方法が明確ではないため、実装を call に設定しましたsocialize.getUserInfo。いずれかのメソッドを呼び出そうとすると、多くの異常なエラーが発生しました。

私が始めているGigyaの指示に従って

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

in onCreate(...)(ここGIGYA_APP_KEYで、コンソールからコピーされた値です)。setAPIDomain を呼び出しているのは、無効なデータ センター エラー (301001 コードではなく 500001 コードではありますが!) が発生していたためです。これは修正されました。

Facebook のログインは、予想どおりにログイン フローを通過し、エラー 400093 で返されます (ドキュメントによると、これは無効な API パラメーターであり、" Missing parameter: client_id" というメッセージが表示されます)。

Twitter のログインは 206002 の "Account Pending Verification" で返されますが、これは理にかなっているようです。それから私は電話します

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

そして、これは私にエラーを与えます:

必須パラメーターがありません: シークレットまたは署名が指定されていません。リクエストを確認できませんでした。

ドキュメントでsocialize.getUserInfoは、Web アプリには UID が必要ですが、ネイティブ アプリには必要ありません。他の必須フィールドについては言及していません。私は少し立ち往生しています... GSAPIAPIキーで初期化されているため、オブジェクトは検証を処理するべきではありませんか?

4

1 に答える 1

1

GIGYA を統合するための非常に高いレベルの方向性を示すことができます。(以下のコードは逐語的ではありません) うまくいけば、多少は役に立ちます。

プライベート Android アプリ用に、GSAPI オブジェクトのシングルトン インスタンスを維持する Manager オブジェクト (GigyaManager) を作成しました。

このシングルトン 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
    }
}
于 2013-04-16T23:20:13.963 に答える