askiiRobotics / react-native-ok-sdk

OK SDK support for React Native apps
MIT License
0 stars 8 forks source link

example not work #1

Open Frimko opened 6 years ago

Frimko commented 6 years ago

http://joxi.ru/GrqgGdnCQv0e12?d=1

4external commented 6 years ago

I modified code to

` package com.askiirobotics.reactnativeoksdk;

import android.app.Activity; import android.content.Intent; import android.util.Log; import android.support.annotation.NonNull;

import com.facebook.react.bridge.*; import com.facebook.react.modules.core.DeviceEventManagerModule;

import com.facebook.react.bridge.ActivityEventListener; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.WritableMap;

import org.json.JSONObject;

import ru.ok.android.sdk.Odnoklassniki; import ru.ok.android.sdk.OkListener; import ru.ok.android.sdk.Shared; import ru.ok.android.sdk.util.OkAuthType;

public class OkManager extends ReactContextBaseJavaModule implements ActivityEventListener { private static final String LOG = "OkManager"; private static final String E_LOGIN_ERROR = "E_LOGIN_ERROR"; private static final String E_GET_USER_FAILED = "E_GET_USER_FAILED";

private Odnoklassniki odnoklassniki;
private String redirectUri;
private Promise loginPromise;

@Override
public void onNewIntent(Intent intent) {}

public OkManager(final ReactApplicationContext reactContext) {
    super(reactContext);
    reactContext.addActivityEventListener(this);
}

@Override
public String getName() {
    return "OkManager";
}

@ReactMethod
public void initialize(final String appId, final String appKey) {
    Log.d(LOG, "Inititalizing app " + appId + " with key " + appKey);
    odnoklassniki = Odnoklassniki.createInstance(getReactApplicationContext(), appId, appKey);
    redirectUri = "okauth://ok" + appId;
}

@ReactMethod
public void login(final ReadableArray scope, final Promise promise) {
    int scopeSize = scope.size();
    final String[] scopeArray = new String[scopeSize];
    for (int i = 0; i < scopeSize; i++) {
        scopeArray[i] = scope.getString(i);
    }
    loginPromise = promise;
    odnoklassniki.checkValidTokens(new OkListener() {
        @Override
        public void onSuccess(JSONObject json) {
            Log.d(LOG, "Check valid token success");
            resolveWithCurrentUser(json.optString(Shared.PARAM_ACCESS_TOKEN), json.optString(Shared.PARAM_SESSION_SECRET_KEY));
        }

        @Override
        public void onError(String error) {
            Log.d(LOG, "Valid token wasn't found at login, requesting authorization");
            odnoklassniki.requestAuthorization(getCurrentActivity(), redirectUri, OkAuthType.ANY, scopeArray);
        }
    });
}

@ReactMethod
public void logout(Promise promise) {
    Log.d(LOG, "Logout");
    odnoklassniki.clearTokens();
    promise.resolve(null);
}

@Override
public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
//public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (Odnoklassniki.getInstance().isActivityRequestOAuth(requestCode)) {
        Odnoklassniki.getInstance().onAuthActivityResult(requestCode, resultCode, data, getAuthListener());
    }
}

@NonNull
private OkListener getAuthListener() {
    return new OkListener() {
        @Override
        public void onSuccess(final JSONObject json) {
            Log.d(LOG, "Activity auth success");
            resolveWithCurrentUser(json.optString(Shared.PARAM_ACCESS_TOKEN), json.optString(Shared.PARAM_SESSION_SECRET_KEY));
        }

        @Override
        public void onError(String error) {
            Log.d(LOG, "OK Oauth error " + error);
            loginPromise.reject(E_LOGIN_ERROR, error);
        }
    };
}

private void resolveWithCurrentUser(final String accessToken, final String sessionSecretKey){
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                //String userStr = odnoklassniki.request("users.getCurrentUser", "get");
                String userStr = odnoklassniki.request("users.getCurrentUser",null, "get");
                JSONObject user = new JSONObject(userStr);
                WritableMap result = Arguments.createMap();
                result.putString(Shared.PARAM_ACCESS_TOKEN, accessToken);
                result.putString(Shared.PARAM_SESSION_SECRET_KEY, sessionSecretKey);
                result.putMap("user", JSONUtil.convertMap(user));
                loginPromise.resolve(result);
            } catch (Exception e) {
                loginPromise.reject(E_GET_USER_FAILED, "users.getLoggedInUser failed: " + e.getLocalizedMessage());
            }
        }
    }).start();
}

} `

` package com.askiirobotics.reactnativeoksdk;

import com.askiirobotics.reactnativeoksdk.OkManager; import com.facebook.react.ReactPackage; import com.facebook.react.bridge.JavaScriptModule; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.uimanager.ViewManager;

import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List;

public class OkPackage implements ReactPackage {

@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
    List<NativeModule> modules = new ArrayList<>();

    modules.add(new OkManager(reactContext));
    return modules;
}

@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
    return Arrays.<ViewManager>asList();
}

} `