استخدام Graph API - Android

يتوفر في 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().

الموارد ذات الصلة