1

我正在使用 Neura sdk 来检测我的用户的特殊事件(到达/离开家) 我正在尝试启动他们的身份验证,如下所述(fetchPermissions() 和 initNeuraConnection() 与文档中的相同,并且 mAuthenticationRequest 在 fetchPermissions() 上启动)

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    getMainActivity().initNeuraConnection();
    fetchPermissions();
    getMainActivity().getClient().authenticate(NEURA_AUTHENTICATION_REQUEST_CODE, mAuthenticateRequest);
}

我的问题是,一旦我调用身份验证 - 什么都没有发生,并且没有打开 neura 登录屏幕

4

1 回答 1

3

您可以检查几件事:

您是否 按照Neura 开发网站中的说明声明了 initNueraConnection()fetchPermissions()

如果是这样,我怀疑您正在发送 authenticate(...) 一个可为空的 mAuthenticateRequest 实例。由于 fetchPermissions() 是异步的(它是一个网络调用),因此您在从 fetchPermissions() 获取结果之前调用了 authenticate(...),因此 mAuthenticateRequest 为空,因为它尚未启动。只有在您收到 fetchPermissions() 上的数据后,您才应该调用 authenticate(...)。

例如,您可以这样做:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    getMainActivity().initNeuraConnection();
    fetchPermissions();
}
private void fetchPermissions() {
    loadProgress(true);
    getMainActivity().getClient().getAppPermissions(new GetPermissionsRequestCallbacks() {
        @Override
        public void onSuccess(final List<Permission> permissions) throws RemoteException {
            if (getActivity() == null)
                return;
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    loadProgress(false);
                    mPermissions = new ArrayList<>(permissions);
                    mAuthenticateRequest = new AuthenticationRequest();
                    mAuthenticateRequest.setAppId(getMainActivity().getClient().getAppUid());
                    mAuthenticateRequest.setAppSecret(getMainActivity().getClient().getAppSecret());
                    mAuthenticateRequest.setPermissions(mPermissions);

                    getMainActivity().getClient().authenticate(NEURA_AUTHENTICATION_REQUEST_CODE, mAuthenticateRequest);
                }
            });
        }

        @Override
        public void onFailure(Bundle resultData, int errorCode) throws RemoteException {
            loadProgress(false);
            mRequestPermissions.setEnabled(true);
        }

        @Override
        public IBinder asBinder() {
            return null;
        }
    });
}

仅供参考,您可以检查您的 logcat 是否存在此错误: authenticationRequest 可以为空,无法创建身份验证请求。

于 2016-05-23T10:30:23.833 回答