يتوفر في Android SDK دعم التكامل مع Facebook Graph API. من خلال الفئتين GraphRequest
وGraphResponse
، يمكنك تقديم طلبات والحصول على استجابات في JSON بشكل غير متزامن. يمكنك أيضًا تقديم طلبات مجمعة بزيارة واحدة لخوادم فيسبوك باستخدام GraphRequestBatch
.
تعرف على المزيد عن Graph API في:
راجع أيضًا مراجع GraphRequest
وGraphResponse
وGraphRequestBatch
للتعرف على كيفية استخدام Facebook SDK لنظام Android ولعمل استدعاءات Graph API لحالات الاستخدام الإضافية.
قبل البدء، يتم إعداد:
GraphRequest
تحتوي فئة GraphRequest
على طريقة newMeRequest
التي تستدعي النقطة الطرفية /user/me لجلب بيانات المستخدم لرمز الوصول المقدم.
ترسل Android SDK أي أذونات لدى تطبيقك في access_token
وهو ما يتحكم في الوصول إلى البيانات. إذا لم يكن لتطبيقك أي رموز وصول متاحة، تعيد Graph API المعلومات المتاحة للعامة فقط. لمعرفة تفاصيل حول خصائص User
والأذونات، راجع مرجع Graph API، وUser
.
افتراضيًا، تجلب طريقة newMeRequest
الحقول الافتراضية من كائن المستخدم. وإذا كنت بحاجة لحقول إضافية، أو تريد تقليل حمل الاستجابة لأسباب تتعلق بالأداء، يمكنك إضافة معلمة fields
وطلب حقول بعينها:
GraphRequest request = GraphRequest.newMeRequest( accessToken, new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted( JSONObject object, GraphResponse response) { // Application code } }); Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,link"); request.setParameters(parameters); request.executeAsync();
في طريقة الاستدعاء، يتم تنسيق بيانات الاستجابة في صورة JSONObject
إذا كان الطلب ناجحًا. ستُحذف من النتيجة الحقول التي لا يمكن جلبها لعدم وجود أذونات.
بالنسبة للمستخدم الذي سجل دخوله، تحتوي SDK على الفئتين Profile
وProfileTracker
، راجع تسجيل دخول فيسبوك لنظام Android.
تعتمد البيانات التي تصل إليها على الأذونات التي يمنحها الشخص لتطبيقك والبيانات التي اختار مشاركتها مع التطبيقات. وإليك مثال لاستجابة Graph API لم تتم معالجتها لـ user_location
وuser_birthday
:
{ "id": "12345678", "birthday": "1/1/1950", "first_name": "Chris", "gender": "male", "last_name": "Colm", "link": "http://www.facebook.com/12345678", "location": { "id": "110843418940484", "name": "Seattle, Washington" }, "locale": "en_US", "name": "Chris Colm", "timezone": -8, "updated_time": "2010-01-01T16:40:43+0000", "verified": true }
تبعًا للنقطة الطرفية التي يمكنك استدعاؤها، ستتلقى JSONObject
أو JSONArray
.
استدعاءات الكائنات المفردة مثل newMeRequest
تعيد JSONObject
. استدعاءات النتائج المتعددة مثل newMyFriendsRequest
تعيد JSONArray
.
يمكنك اختبار حقل الخطأ بكائن GraphResponse
لمعرفة هل نجح الطلب أم لا. يكون حقل الخطأ من النوع FacebookRequestError
. الطرق التي يمكنك استدعاؤها هي:
يحتوي كائن الخطأ على حقول توضح تفاصيل حول الخطأ ومن بينها:
error code
،sub error code
error message
user facing error message
لمزيد من التفاصيل حول رموز الأخطاء المحتملة، راجع استخدام Graph API، معالجة الأخطاء.
يحتوي كائن GraphResponse
أيضًا على enum
تصنف الأخطاء. التصنيفات الثلاثة المحتملة هي:
LOGIN_RECOVERABLE
- هناك مشكلة تتطلب أن يسجل المستخدم دخوله مرة أخرى. يمكنك استدعاء LoginManager
لـ resolveError
باستخدام كائن GraphResponse
والنشاط أو الجزء من تطبيقك. يؤدي ذلك إلى تشغيل واجهة مستخدم تسجيل دخول فيسبوك، وستحتاج لتنفيذ CallbackManager
عن طريق استدعاء الجزء أو النشاط لكي ينجح تسجيل الدخول.TRANSIENT
- يشير إلى وقوع مشكلة مؤقتة، ويمكن لتطبيقك محاولة الطلب مجددًا.OTHER
- يشير إلى وقوع مشكلة عامة، ويمكنك معرفة مزيد من التفاصيل عن طريق فحص error code
وsub error code
.إذا كنت تواجه مشكلة في جلب بيانات المستخدم، فقم بتمكين تسجيل طلب HTTP بإضافة هذا الرمز قبل طلب تطبيقك لبيانات المستخدم:
FacebookSdk.addLoggingBehavior(LoggingBehavior.REQUESTS);
سيعمل ذلك على تسجيل تفاصيل حول طلبات HTTP والاستجابة في سجل وحدة التحكم.
ينبغي عليك تقديم طلبات مجمعة للحصول على البيانات إذا كان تطبيقك يعالج أنواع السيناريوهات التالية:
إذا كنت ترغب في تقليل عدد زيارات الخادم، يمكنك استخدام طلب مسار. على سبيل المثال، يمكننا جلب المستخدم وأصدقائه:
GraphRequestBatch batch = new GraphRequestBatch( GraphRequest.newMeRequest( access_token, new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted( JSONObject jsonObject, GraphResponse response) { // Application code for user } }), GraphRequest.newMyFriendsRequest( access_token, new GraphRequest.GraphJSONArrayCallback() { @Override public void onCompleted( JSONArray jsonArray, GraphResponse response) { // Application code for users friends } }) ); batch.addCallback(new GraphRequestBatch.Callback() { @Override public void onBatchCompleted(GraphRequestBatch graphRequests) { // Application code for when the batch finishes } }); batch.executeAsync();
يعرض المثال أعلاه الطلب المجمع كاستدعاء غير متزامن. إذا كان هذا الرمز البرمجي في سلسلة خلفية، وكنت ترغب في حظره إلى أن ينتهي الاستدعاء، يمكنك استدعاء batch.executeAndWait()
.
User
- مرجع مستخدم Graph APIGraphRequestBatch
- مرجع GraphRequestBatch
GraphRequest
- مرجع GraphRequest