ユーザーの年齢の特定

このトピックでは、ユーザーが年齢の情報を Live サービスに保存することにした場合にユーザーの年齢を取得する方法について説明します。ここで説明する例では、サインインしているユーザーが 18 歳以上であることをアプリで確認できるまで購入コントロールが無効になります。

アプリがユーザーとやり取りする場合に、ユーザー エクスペリエンスを適切なものにするうえで重要な情報があります。たとえば、ユーザーの年齢を知ることは、特に、年齢制限のあるメディアのアプリ内購入などの操作をアプリで許可する場合に重要になります。

このトピックは、アプリで Live Connect API が既に初期化されていること、ユーザーがサインインしていること、ユーザーが wl.birthday スコープに同意していること (これにより、ユーザーの誕生日情報へのアクセスが許可されます) を前提としています。ここに挙げた最初のステップについて詳しくは、「ユーザーのサインイン」と「ユーザーの同意の取得」をご覧ください。

このトピック内のコード例を最大限に利用するには、「コード例の使用」で提供されている、より大きなコード リファレンス サンプルの中で使います。

JavaScript と HTML を使ったユーザーの年齢の処理 (Windows ストア アプリ向け)

このコード例では、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."; 
}


トップに戻る

C# を使ったユーザーの年齢の処理 (Windows ストア アプリと Windows Phone アプリ向け)

このコード例では、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.";
}


トップに戻る

Objective-C を使ったユーザーの年齢の処理 (iOS 向け)

このコード例では、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;
    }
}


トップに戻る

Java を使ったユーザーの年齢の処理 (Android 向け)

このコード例では、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 を使ったユーザーの年齢の処理

Representational State Transfer (REST) で適切な GET 呼び出しを行うと、JavaScript Object Notation (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