确定用户年龄

本主题介绍和演示如果用户选择将其年龄信息存储在 Live 服务中,如何获取用户的年龄。在应用能够确认已登录用户至少为 18 岁之前,本主题中提供的示例将禁用购买控件。

当你的应用与用户交互时,某些信息对于确保用户获得相应的体验是非常重要的。知道用户的年龄就是一个好的示例,当你的应用允许某些操作(例如对限制年龄的媒体的应用内购买)时尤其如此。

本主题假设你的应用已经初始化 Live Connect API、用户已经登录而且用户已经同意 wl.birthday 作用域(它授予对用户生日信息的访问权限)。有关这些初始步骤的详细信息,请参阅实现用户登录征求用户同意

为了充分利用本主题中的代码示例,你可以在使用代码示例中提供的大型代码参考示例的上下文中使用这些代码示例。

针对 Windows 应用商店应用以 JavaScript 和 HTML 处理用户的年龄

在该代码示例中,WL.api 函数请求 me 的信息,这会返回已登录用户的个人资料信息。

WL.api 返回后,response.birth_year 将包含用户已存储在个人资料中的出生年份,代码将使用它来计算用户的年龄。


function userAge_onClick() {
    WL.login({
        scope: ["wl.signin", "wl.birthday"]
    }).then(
        function (response) {
            WL.api({
                path: "me",
                method: "GET"
            }).then(
                function (response) {
                    if (response.birth_year) {
                        var date = new Date();
                        var year = date.getFullYear();
                        var age = year - response.birth_year;
                        if (age >= 18) {
                            document.getElementById("purchaseButton").disabled = "";
                            document.getElementById("infoArea").innerText =
                                "Age is 18 or older. Purchase button enabled.";
                        }
                        else {
                            document.getElementById("purchaseButton").disabled = "disabled";
                            document.getElementById("infoArea").innerText =
                                "Age is under 18. Purchase button disabled.";
                        }
                    }
                    else {
                        document.getElementById("purchaseButton").disabled = "disabled";
                        document.getElementById("infoArea").innerText =
                            "Cannot determine age. Purchase button disabled.";
                    }
                },
                function (responseFailed) {
                    document.getElementById("infoArea").innerText =
                        "Error calling API: " + responseFailed.error.message;
                }
            );
        },
        function (responseFailed) {
            document.getElementById("infoArea").innerText =
                "Error signing in: " + responseFailed.error_description;
        }
    );
}

function purchaseButton_onClick() {
    document.getElementById("infoArea").innerText =
        "Purchase button clicked."; 
}


返回页首

针对 Windows 应用商店应用和 Windows Phone 应用以 C# 处理用户的年龄

在该代码示例中,LiveConnectClient.GetAsync 方法请求 me 的信息,这会返回已登录用户的个人资料信息。将根据所返回信息中的出生年份来计算用户的年龄。


private async void btnAge_Click(object sender, RoutedEventArgs e)
{
    try
    {
        LiveConnectClient liveClient = new LiveConnectClient(this.session);
        LiveOperationResult operationResult = await liveClient.GetAsync("me");
        dynamic result = operationResult.Result;
        if (result.birth_year != null)
        {
            DateTime date = DateTime.Now;
            int year = date.Year;
            int age = year - (int)result.birth_year;
            if (age >= 18)
            {
                infoTextBlock.Text = "Age is 18 or older. Purchase button enabled.";
                btnPurchase.IsEnabled = true;
            }
            else
            {
                infoTextBlock.Text = "Age is under 18. Purchase button disabled.";
            }
        }
        else
        {
            infoTextBlock.Text = "Could not determine birth year. Purchase button disabled.";
        }

    }
    catch (LiveConnectException exception)
    {
        infoTextBlock.Text = "Error getting user info: " + exception.Message;
    }
}

private void btnPurchase_Click(object sender, RoutedEventArgs e)
{
    infoTextBlock.Text = "Purchase button clicked.";
}


返回页首

针对 iOS 以 Objective-C 处理用户的年龄

在该代码示例中,LiveConnectClient getWithPath:delegate 方法请求 me 的信息,这会返回已登录用户的个人资料信息。然后,liveOperationSucceeded:operation 根据所返回信息中的出生年份来计算用户的年龄,以确定是否应启用购买按钮。


- (void) getAge
{
    [self.liveClient getWithPath:@"me" 
                        delegate:self];
}

- (void) liveOperationSucceeded:(LiveOperation *)operation
{
    NSDate *currentDate = [NSDate date];
    NSCalendar* calendar = [NSCalendar currentCalendar];
    NSDateComponents* dateComponents = [calendar components:NSYearCalendarUnit 
                                                   fromDate:currentDate];
    NSInteger currentYear = [dateComponents year];
    NSInteger usersBirthYear = (int)[operation.result objectForKey:@"birth_year"];
    NSInteger age = currentYear - usersBirthYear; 
    if (age >= 18)
    {
        self.purchaseButton.enabled = YES;
    }
    else
    {
        self.purchaseButton.enabled = NO;
    }
}


返回页首

针对 Android 以 Java 处理用户的年龄

在该代码示例中,LiveConnectClient.getAsync 方法请求 me 的信息,这会返回已登录用户的个人资料信息。然后,自定义的 updateRestrictedButton 根据所返回信息中的出生年份来计算用户的年龄,以确定是否应启用购买按钮。


public void getUserAge() {
    client.getAsync("me", new LiveOperationListener() {
        public void onError(LiveOperationException exception, LiveOperation operation) {
            resultTextView.setText("Error getting user info: " + exception.getMessage());
        }
        public void onComplete(LiveOperation operation) {
            JSONObject result = operation.getResult();
            updateRestrictedButton(result);
        }
    });
}

private void updateRestrictedButton(JSONObject user) {
    boolean enable = false;
    if (user != null) {
        int birthYear = user.optInt("birth_year");
        if (birthYear > 0) {
            int year = new Date().getYear();
            int age = year - birthYear;
            if (age >= 18) {
                enable = true;
            }
        }
    }
    if (enable == true) {
        resultTextView.setText("Purchase button enabled.");
    }
    else {
        resultTextView.setText("Purchase button disabled.");
    }
}


返回页首

使用 REST 来处理用户的年龄

在表征状态转移 (REST) 中进行适当的 GET 调用之后,将响应用户的信息。响应是以 JavaScript 对象表示法 (JSON) 格式返回的,你可以分析该响应以获取其中的各个结构。下面介绍如何进行 GET 调用,其中已登录的用户表示为 me

GET https://apis.live.net/v5.0/me?access_token=ACCESS_TOKEN

以某个虚拟用户为例,返回的 JSON 格式的信息可能如下所示。

{
  "first_name" : "Luka",
  "last_name" : "Abrus",
  "birth_month" : 6,
  "birth_date" : 26,
  "birth_year" : 1968
}

返回页首

后续步骤

本主题演示如何使用 wl.birthday 作用域获取用户的出生年份,以及如何确定用户年龄是否大到能够通过你的应用进行某种类型的购买。请继续学习以下内容:

返回页首

 

 

显示:
© 2014 Microsoft