如何使用Amazon AWS在Android中登录Facebook登录关系数据库中的用户信息

时间:2016-05-04 13:29:57

标签: android facebook amazon-web-services android-studio amazon-s3

我目前正在开发Android应用程序并启动并运行Facebook登录。我接下来要做的是将用户信息存储在Amazon AWS中的关系数据库服务中。我在亚马逊上设置了一个实例,从以前的研究来看,我认为需要创建用户池来存储用户信息,但是1.我不太确定是这种情况而且2.我不确定设置后如何实际使用用户池。我也看到可以使用Cognito同步,但是再次将它与Android上的Facebook集成并不是我所知道的,也不能在网上找到这些资源或信息。一旦用户通过Facebook登录,我想存储他们的姓名和电子邮件并访问他们朋友的列表。

我的下面的代码显示了我的Facebook login.java文件的主要部分:

if(AccessToken.getCurrentAccessToken() != null){
        RequestData();
        share.setVisibility(View.VISIBLE);
        details.setVisibility(View.VISIBLE);
        destinations.setVisibility(View.VISIBLE);
    }

    login.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            if(AccessToken.getCurrentAccessToken() != null) {
                share.setVisibility(View.INVISIBLE);
                details.setVisibility(View.INVISIBLE);
                destinations.setVisibility(View.INVISIBLE);
                profile.setProfileId(null);
            }
        }
    });

    share.setOnClickListener(
            new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            ShareLinkContent content = new ShareLinkContent.Builder().build();
            shareDialog.show(content);

        }
    });

    destinations.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, SelectDestination.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);

        }
    });

    login.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {

        @Override
        public void onSuccess(LoginResult loginResult) {

            Intent intent = new Intent(MainActivity.this, SelectDestination.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);

            if(AccessToken.getCurrentAccessToken() != null){
                RequestData();
                share.setVisibility(View.VISIBLE);
                details.setVisibility(View.VISIBLE);
                destinations.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onCancel() {
            System.out.println("Cancelled");
        }

        @Override
        public void onError(FacebookException exception) {
            System.out.println("Cancelled");
        }
    });

}
public void RequestData(){
    GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
        @Override
        public void onCompleted(JSONObject object,GraphResponse response) {

            JSONObject json = response.getJSONObject();
            try {
                if(json != null){
                    String text = "<b>Name :</b> "+json.getString("name")+"<br><br><b>Email :</b> "+json.getString("email")+"<br><br><b>Profile link :</b> "+json.getString("link");
                    details_txt.setText(Html.fromHtml(text));
                    profile.setProfileId(json.getString("id"));
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    });
    Bundle parameters = new Bundle();
    parameters.putString("fields", "id,name,link,email,picture");
    request.setParameters(parameters);
    request.executeAsync();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

我已将以下内容添加到Build.app gradle文件中,因为我认为可能需要它们:

compile 'com.amazonaws:aws-android-sdk-ec2:2.+'
compile 'com.amazonaws:aws-android-sdk-core:2.+'
compile 'com.amazonaws:aws-android-sdk-cognito:2.+'
compile 'com.amazonaws:aws-android-sdk-s3:2.+'
compile 'com.amazonaws:aws-android-sdk-ddb:2.+'
compile 'com.amazonaws:aws-android-sdk-sdb:2.+'

我还在AndroidManifestxml中添加了以下依赖项:

<dependencies>
    <dependency>
        <groupid>com.amazonaws</groupid>
        <artifactid>aws-android-sdk-core</artifactid>
        <version>[2.2.0, 2.3)</version>
    </dependency>
    <dependency>
        <groupid>com.amazonaws</groupid>
        <artifactid>aws-android-sdk-cognito</artifactid>
        <version>[2.2.0, 2.3)</version>
    </dependency>
    <dependency>
        <groupid>com.amazonaws</groupid>
        <artifactid>aws-android-sdk-mobileanalytics</artifactid>
        <version>[2.2.0, 2.3)</version>
    </dependency>
    <dependency>
        <groupid>com.amazonaws</groupid>
        <artifactid>aws-android-sdk-sqs</artifactid>
        <version>[2.2.0, 2.3)</version>
    </dependency>
    <dependency>
        <groupid>com.amazonaws</groupid>
        <artifactid>aws-android-sdk-ec2</artifactid>
        <version>[2.2.0, 2.3)</version>
    </dependency>
    <dependency>
        <groupid>com.amazonaws</groupid>
        <artifactid>aws-android-sdk-s3</artifactid>
        <version>[2.2.0, 2.3)</version>
    </dependency>
</dependencies>

有人可以提供有关如何使用功能的任何信息吗?它是我的应用程序的主要部分,它真的让我退缩。我真的很感激它的任何帮助。

谢谢。

1 个答案:

答案 0 :(得分:0)

你无法直接从android与关系数据库服务交谈。您将需要某种Web服务器或lambda函数来与rds通信并使用查询输出回复您。

您可以在http://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html

找到有关如何执行此操作的详细信息

然后,您可以使用适用于Android的AWS开发工具包调用您已创建的lambda函数。