با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
این راهنما نحوه استفاده از API های دوستان را در پروژه های Android Studio شرح می دهد.
دوستان را بارگیری کنید
می توانید لیستی از بازیکنانی که با کاربر فعلی دوست هستند بازیابی و نمایش دهید (در بازی). به عنوان یک کاربر، می توان کنترل کرد که کدام بازی ها به لیست دوستان دسترسی دارند. هنگامی که لیست دوستان را بازیابی می کنید، باید مواردی را که مجوز لازم است رسیدگی کنید. این همه در API کپسوله شده است تا درخواست دسترسی و متعاقباً استفاده از لیست دوستان به یک کار ساده تبدیل شود. برای بارگیری لیست دوستان، مراحل زیر را دنبال کنید:
اگر تماس با موفقیت انجام شود (کاربر قبلاً اجازه دسترسی به لیست دوستان را داده است)، خدمات بازیهای Google Play یک PlayerBuffer حاشیهنویسی را برمیگرداند که نمایانگر دوستان کاربر است.
اگر بازیکن نیاز به اجازه دسترسی به لیست دوستان داشته باشد، تماس با FriendsResolutionRequiredException ناموفق است. هنوز هیچ دیالوگی نشان داده نشده است.
این استثنا شامل یک Intent است که گفتگویی را برای درخواست رضایت از بازیکن راه اندازی می کند. میتوانید بلافاصله این Intent برای باز کردن یک گفتگوی رضایت راهاندازی کنید. شما فقط یک بار می توانید از این Intent استفاده کنید.
اگر نتیجه فعالیت IntentActivity.RESULT_OK باشد، رضایت داده شد. دوباره با loadFriends() تماس بگیرید تا لیست دوستان را برگردانید. اگر نتیجه Activity.RESULT_CANCELLED باشد، کاربر رضایت نداد و loadFriends() به بازگرداندن FriendsResolutionRequiredException ادامه خواهد داد.
کد زیر نحوه بارگذاری لیست دوستان را نشان می دهد:
// Attempt loading friends.// Register a success listener to handle the successfully loaded friends list.// Register a failure listener to handle asking for permission to access the list.PlayGames.getPlayersClient(this).loadFriends(PAGE_SIZE,/* forceReload= */false).addOnSuccessListener(newOnSuccessListener<AnnotatedData<PlayerBuffer>>(){@OverridepublicvoidonSuccess(AnnotatedData<PlayerBuffer>data){PlayerBufferplayerBuffer=data.get();// ...}).addOnFailureListener(exception->{if(exceptioninstanceofFriendsResolutionRequiredException){PendingIntentpendingIntent=((FriendsResolutionRequiredException)task.getException()).getResolution();parentActivity.startIntentSenderForResult(pendingIntent.getIntentSender(),/* requestCode */SHOW_SHARING_FRIENDS_CONSENT,/* fillInIntent */null,/* flagsMask */0,/* flagsValues */0,/* extraFlags */0,/* options */null);}});return;}
کد زیر نحوه رسیدگی به نتیجه درخواست رضایت را نشان می دهد:
/** Handle the activity result from the request for consent. */@OverridepublicvoidonActivityResult(intrequestCode,intresult,Intentdata){if(requestCode==SHOW_SHARING_FRIENDS_CONSENT){if(result==Activity.RESULT_OK){// We got consent from the user to access their friends. Retry loading the friendscallLoadFriends();}else{// User did not grant consent.}}}
نمایه بازیکن دیگر را مشاهده کنید
میتوانید نمایه بازیهای Play بازیکن دیگری را از داخل بازی خود نمایش دهید. این نما به بازیکنان اجازه میدهد تا دعوتنامههای دوستان را برای بازیکنی که در حال مشاهده است ارسال و قبول کنند. این نما نیازی به دسترسی به لیست دوستان ندارد. علاوه بر این، اگر بازی شما مفهوم خاص خود را از نام بازیکنان جدا از شناسههای بازیکن Play Games دارد، میتوانید این نامها را به نمای نمایه ارسال کنید تا در دعوتنامههای دوستان برای زمینه اضافی گنجانده شوند.
برای نمایش نمایه بازیکن دیگر، این مراحل را دنبال کنید:
اگر تماس با موفقیت انجام شود، خدمات بازیهای Google Play یک Intent برمیگرداند که صفحهای را نشان میدهد که در آن کاربر میتواند خود را با نمایه بازیکن دیگر مقایسه کند.
برای شروع یک فعالیت از Intent مرحله قبل استفاده کنید.
// Retrieve and launch an Intent to show a player profile within the game.PlayGames.getPlayersClient(this).getCompareProfileIntent(otherPlayerId).addOnSuccessListener(newOnSuccessListener<Intent>(){@OverridepublicvoidonSuccess(Intentintent){startActivityForResult(intent,RC_SHOW_PROFILE);// ...}});
اگر بازی نام خاص خود را برای بازیکنان دارد، می توان آنها را به فراخوانی API اضافه کرد. این به بازیهای Play امکان میدهد نام مستعار بازیکنانی را که از داخل بازی شما دعوت نامههای دوستان ارسال میکنند، روی «<game-specific-name> از <your-game-name>» تنظیم کند. ):
// Show a player profile within the game, with additional hints containing the// game-specific names for both players.// - otherPlayerId is the Play Games playerId of the player to view.// - otherPlayerInGameName is the game-specific name of the player being viewed.// - currentPlayerInGameName is the game-specific name of the player who is signed// in. Hence if the player sends an invitation to the profile they are viewing,// their game-specific name can be included.PlayGames.PlayersClient(this).getCompareProfileIntentWithAlternativeNameHints(otherPlayerId,otherPlayerInGameName,currentPlayerInGameName).addOnSuccessListener(newOnSuccessListener<Intent>(){@OverridepublicvoidonSuccess(Intentintent){startActivityForResult(intent,RC_SHOW_PROFILE);// ...}});
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[null,null,["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Friends in Android games\n\n| **Note:** This guide is for the Play Games Services v2 SDK. For information on the previous version of this SDK, see the [Play Games Services v1\n| documentation](/games/pgs/v1/android/friends).\n\nThis guide describes how to use the [Friends](/games/pgs/friends) APIs in\nAndroid Studio projects.\n\nLoad friends\n------------\n\nYou can retrieve and display (in the game) a list of players who are friends\nwith the current user. As a user, it is possible to control which games have\naccess to the friends list. When you retrieve the friends list, you must handle\nthe case where permission is required. This is all encapsulated in the API to\nmake requesting access and subsequently using the friends list a straightforward\ntask. To load the friends list, follow these steps:\n\n1. Call the [`PlayersClient.loadFriends()`](https://developers.google.com/android/reference/com/google/android/gms/games/PlayersClient#loadFriends(int,%20boolean)) method, which is an asynchronous call returning a [`Task`](https://developers.google.com/android/reference/com/google/android/gms/tasks/Task) object.\n2. If the call is successful (the user already granted access to the friends list), Google Play Games Services returns an annotated [`PlayerBuffer`](https://developers.google.com/android/reference/com/google/android/gms/games/PlayerBuffer) that represents the user's friends.\n3. If the player needs to grant access to the friends list, the call fails with\n a\n [`FriendsResolutionRequiredException`](https://developers.google.com/android/reference/com/google/android/gms/games/FriendsResolutionRequiredException).\n No dialogs are shown yet.\n\n 1. This exception contains an `Intent` that triggers a dialog to ask the player for consent. You can launch this `Intent` immediately to open a consent dialog. You can only use this `Intent` once.\n 2. If the result of the `Intent`'s activity is `Activity.RESULT_OK`, then\n consent was granted. Call `loadFriends()` again to return the friends\n list. If the result is `Activity.RESULT_CANCELLED`, the user did\n not consent and `loadFriends()` will continue to return\n `FriendsResolutionRequiredException`.\n\n | **Note:** If you call `loadFriends()` from your server and determine that you need to request consent, you need to call `loadFriends()` again from your game client. This second call won't succeed, but it will provide you the `Intent` required to show the consent dialog.\n\nThe following code shows how to load the friends list: \n\n // Attempt loading friends.\n // Register a success listener to handle the successfully loaded friends list.\n // Register a failure listener to handle asking for permission to access the list.\n PlayGames.getPlayersClient(this)\n .loadFriends(PAGE_SIZE, /* forceReload= */ false)\n .addOnSuccessListener(\n new OnSuccessListener\u003cAnnotatedData\u003cPlayerBuffer\u003e\u003e() {\n @Override\n public void onSuccess(AnnotatedData\u003cPlayerBuffer\u003e data) {\n PlayerBuffer playerBuffer = data.get();\n // ...\n })\n\n .addOnFailureListener(\n exception -\u003e {\n if (exception instanceof FriendsResolutionRequiredException) {\n PendingIntent pendingIntent =\n ((FriendsResolutionRequiredException) task.getException())\n .getResolution();\n parentActivity.startIntentSenderForResult(\n pendingIntent.getIntentSender(),\n /* requestCode */ SHOW_SHARING_FRIENDS_CONSENT,\n /* fillInIntent */ null,\n /* flagsMask */ 0,\n /* flagsValues */ 0,\n /* extraFlags */ 0,\n /* options */ null);\n }\n });\n return;\n }\n\nThe following code shows how to handle the result from the request for consent: \n\n /** Handle the activity result from the request for consent. */\n @Override\n public void onActivityResult(int requestCode, int result, Intent data) {\n if (requestCode == SHOW_SHARING_FRIENDS_CONSENT) {\n if (result == Activity.RESULT_OK) {\n // We got consent from the user to access their friends. Retry loading the friends\n callLoadFriends();\n } else {\n // User did not grant consent.\n }\n }\n }\n\nView another player's profile\n-----------------------------\n\nYou can display a view of another player's Play Games profile from\nwithin your game. This view allows players to send and accept friend invitations\nfor the player being viewed. This view does not require access to the friends\nlist. Additionally, if your game has its own concept of player names separate\nfrom Play Games Gamer IDs, you can pass these along to the profile view\nso that they can be included in any friend invitations for additional context.\n\nTo show another player's profile, follow these steps:\n\n1. Call the [`PlayersClient.getCompareProfileIntent()`](https://developers.google.com/android/reference/com/google/android/gms/games/PlayersClient) method, which is an asynchronous call returning a [`Task`](https://developers.google.com/android/reference/com/google/android/gms/tasks/Task) object.\n2. If the call is successful, Google Play Games Services returns an Intent that will display a screen where the user can compare themselves against another player's profile.\n3. Use the `Intent` from the previous step to start an activity.\n\n // Retrieve and launch an Intent to show a player profile within the game.\n PlayGames.getPlayersClient(this)\n .getCompareProfileIntent(otherPlayerId)\n .addOnSuccessListener(new OnSuccessListener\u003cIntent\u003e() {\n @Override\n public void onSuccess(Intent intent) {\n startActivityForResult(intent, RC_SHOW_PROFILE);\n // ...\n }});\n\nIf the game has its own name for players, these can be added to the API call.\nThis enables Play Games to set the nickname of players who send friend\ninvitations from within your game to \"\\\u003cgame-specific-name\\\u003e from\n\\\u003cyour-game-name\\\u003e\" Play Games automatically appends \"from\n\\\u003cyour-game-name\\\u003e\"): \n\n // Show a player profile within the game, with additional hints containing the\n // game-specific names for both players.\n // - otherPlayerId is the Play Games playerId of the player to view.\n // - otherPlayerInGameName is the game-specific name of the player being viewed.\n // - currentPlayerInGameName is the game-specific name of the player who is signed\n // in. Hence if the player sends an invitation to the profile they are viewing,\n // their game-specific name can be included.\n PlayGames.PlayersClient(this)\n .getCompareProfileIntentWithAlternativeNameHints(otherPlayerId, otherPlayerInGameName, currentPlayerInGameName)\n .addOnSuccessListener(new OnSuccessListener\u003cIntent\u003e() {\n @Override\n public void onSuccess(Intent intent) {\n startActivityForResult(intent, RC_SHOW_PROFILE);\n // ...\n }});"]]