بدء استخدام حزمة تطوير البرامج (SDK) لنظام التشغيل Android

قبل بدء استخدام حزمة تطوير البرامج (SDK) لنظام التشغيل Android، تأكّد من تنفيذ المتطلبات الأساسية.

تتيح لك حزمة تطوير البرامج (SDK) لنظام التشغيل Android إضافة البطاقات إلى "محفظة Google". عند إضافة زرّ محفظة Google إلى تطبيقك، سيحظى المستخدمون بتجربة بسيطة وممتعة بإضافة بطاقاتهم إلى "محفظة Google".

اتّبِع الخطوات لإضافة زر محفظة Google إلى تطبيق Android:

1- إنشاء عنصر من "البطاقات"

ملاحظة: يجب توفير فئة البطاقات لإنشاء كائن البطاقات. إذا لم يسبق لك إنشاء بطاقة، اتّبِع التعليمات حول كيفية إنشاء فئة بطاقات. حدِّد سمة GiftCardObject مطابقة، بما في ذلك السمات المطلوبة التالية:

  • cardNumber: المعرّف المرتبط بالبطاقة
  • state: يُستخدم هذا الحقل لتحديد طريقة عرض الكائن. على سبيل المثال، يتم نقل عنصر غير نشط إلى قسم "البطاقات المنتهية الصلاحية".

يمكنك مراجعة نموذج التنسيق للاطّلاع على مزيد من المعلومات حول كيفية تمثيل هذه السمات في بطاقة الهدايا.

في ما يلي تعريف نموذج بطاقة الهدايا:

JSON

      
{
  "id": "ISSUER_ID.OBJECT_ID",
  "classId": "ISSUER_ID.CLASS_ID",
  "cardNumber": "1234567890",
  "state": "ACTIVE"
}
      
    

2. إنشاء JWT غير موقَّع باستخدام الكائن

عند إنشاء GiftCardObject، يجب لفّه باستخدام JWT غير موقَّع مع السمة payload.GiftCardObjects، كما هو موضّح في المقتطف التالي:

JSON

{
  "iss": "OWNER_EMAIL_ADDRESS",
  "aud": "google",
  "typ": "savetowallet",
  "iat": "UNIX_TIME",
  "origins": [],
  "payload": {
      "giftcardObjects": [ NEW_OBJECT ]
  }
}

3. تضمين زر "محفظة Google" في واجهة المستخدم

توفر محفظة Google زرًا مألوفًا يمكنك استخدامه لبدء عملية "إضافة إلى محفظة Google" في تطبيقك. وتتوفر أصول المتجه للزر في إرشادات الأزرار.

يمكنك استيراد أصول المتجهات في "استوديو Android" ضمن File > New > Vector Asset. حدد "ملف محلي" في المعالج، وأضف اسمًا (على سبيل المثال: add_to_google_wallet_button.xml) وحدد موقع الملف في محرك الأقراص المحلي لاستيراده.

الآن، يمكنك استخدام الشكل القابل للرسم الذي تم استيراده لإضافة الزر إلى واجهة المستخدم الخاصة بك:

<ImageButton
    android:id="@+id/addToGoogleWalletButton"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:minWidth="200dp"
    android:clickable="true"
    android:src="@drawable/add_to_google_wallet_button" />

يحتوي الزر على layout_height وحدة بكسل مستقلة الكثافة تبلغ 48 بكسل مستقل الكثافة ويجب ألا يقل عرضها عن 200 بكسل مستقل الكثافة.

4. التحقّق من توفُّر Google Wallet API على الجهاز المستهدَف

قبل حفظ العنصر الجديد، تأكَّد من أنّ واجهة برمجة تطبيقات Google Wallet متاحة على الجهاز المستهدَف من خلال استدعاء الطريقة getPayApiAvailabilityStatus في الفئة PayClient. ابدأ بإضافة متغير عضو إلى النشاط حيث ستعرض الزر وإنشاء مثيل له عند إنشاء النشاط:

Kotlin

import com.google.android.gms.pay.PayClient

private lateinit var walletClient: PayClient

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)

  walletClient = Pay.getClient(this)

  // Additional logic in your onCreate method
}

Java

import com.google.android.gms.pay.PayClient;

private final PayClient walletClient;

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  walletClient = Pay.getClient(application);

  // Additional logic in your onCreate method
}

يمكنك الآن الاستعانة بالعميل للتحقق مما إذا كانت واجهة برمجة التطبيقات متوفرة أم لا:

Kotlin

import com.google.android.gms.pay.PayApiAvailabilityStatus

private fun fetchCanUseGoogleWalletApi() {
  walletClient
    .getPayApiAvailabilityStatus(PayClient.RequestType.SAVE_PASSES)
    .addOnSuccessListener { status ->
      if (status == PayApiAvailabilityStatus.AVAILABLE) {
        // The API is available, show the button in your UI
      } else {
        // The user or device is not eligible for using the Pay API
      }
    }
    .addOnFailureListener {
      // Hide the button and optionally show an error message
    }
}

Java

import com.google.android.gms.pay.PayApiAvailabilityStatus;

private void fetchCanAddPassesToGoogleWallet() {
  walletClient
    .getPayApiAvailabilityStatus(PayClient.RequestType.SAVE_PASSES)
    .addOnSuccessListener(status -> {
      if (status == PayApiAvailabilityStatus.AVAILABLE) {
        // The API is available, show the button in your UI
      } else {
        // The user or device is not eligible for using the Pay API
      };
    })
    .addOnFailureListener(exception -> {
      // Google Play Services is too old, or API availability not verified
      // Hide the button and optionally show an error message
    });
}

وأخيرًا، استدعِ الطريقة المحددة أعلاه في تطبيقك عندما تحتاج إلى تحديد مدى توفّر واجهة برمجة التطبيقات.

5. إضافة العنصر إلى "محفظة Google"

يمكن إضافة GiftCardObject من خلال تمرير JWT غير الموقَّع من الخطوة 2 إلى طريقة savePasses. يمكنك بدء عملية الإضافة بالنقر على زر محفظة Google:

Kotlin

import android.os.Bundle
import android.view.View
import com.google.android.gms.samples.wallet.databinding.ActivityCheckoutBinding

private val addToGoogleWalletRequestCode = 1000

private lateinit var layout: ActivityCheckoutBinding
private lateinit var addToGoogleWalletButton: View

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)

  // Use view binding to access the UI elements
  layout = ActivityCheckoutBinding.inflate(layoutInflater)
  setContentView(layout.root)

  addToGoogleWalletButton = layout.addToGoogleWalletButton
  addToGoogleWalletButton.setOnClickListener {
    walletClient.savePasses(newObjectJson, this, addToGoogleWalletRequestCode)
  }

  // Additional logic in your onCreate method
}

Java

import android.os.Bundle;
import android.view.View;
import com.google.android.gms.samples.wallet.databinding.ActivityCheckoutBinding;

private static final int ADD_TO_GOOGLE_WALLET_REQUEST_CODE = 999;

private ActivityCheckoutBinding layout:
private View addToGoogleWalletButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  // Use view binding to access the UI elements
  layout = ActivityCheckoutBinding.inflate(getLayoutInflater());
  setContentView(layout.getRoot());

  addToGoogleWalletButton = layout.addToGoogleWalletButton;
  addToGoogleWalletButton.setOnClickListener(v -> {
    walletClient.savePasses(newObjectJson, this, ADD_TO_GOOGLE_WALLET_REQUEST_CODE);
  });

  // Additional logic in your onCreate method
}

تؤدي الطريقة savePasses إلى تفعيل مسار الحفظ واستدعاء الطريقة onActivityResult بعد اكتمال عملية الحفظ. يجب أن يتم تنفيذ onActivityResult بالطريقة التالية:

Kotlin

import android.content.Intent

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
  super.onActivityResult(requestCode, resultCode, data)

  if (requestCode == addToGoogleWalletRequestCode) {
    when (resultCode) {
      RESULT_OK -> {
        // Pass saved successfully
      }

      RESULT_CANCELED -> {
        // Save operation canceled
      }

      PayClient.SavePassesResult.SAVE_ERROR -> data?.let { intentData ->
        val errorMessage = intentData.getStringExtra(PayClient.EXTRA_API_ERROR_MESSAGE)
        // Handle error
      }

      else -> {
          // Handle unexpected (non-API) exception
      }
    }
  }
}

Java

import android.content.Intent;

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  super.onActivityResult(requestCode, resultCode, data);

  if (requestCode == ADD_TO_GOOGLE_WALLET_REQUEST_CODE) {
    switch (resultCode) {
      case RESULT_OK: {
        // Pass saved successfully
        break;
      }

      case RESULT_CANCELED: {
        // Save operation canceled
        break;
      }

      case PayClient.SavePassesResult.SAVE_ERROR: {
        if (data != null) {
          String apiErrorMessage = data.getStringExtra(PayClient.EXTRA_API_ERROR_MESSAGE);
          // Handle error
        }
        break;
      }

      default: {
        // Handle unexpected (non-API) exception
      }
    }
  }
}

عند إضافة البطاقة بنجاح، تحتوي السمة resultCode على القيمة Activity.RESULT_OK.

تمريرات [للاختبار فقط]

عندما لا تزال في الوضع التجريبي، ستتضمّن جميع البطاقات التي تنشئها نصًا إضافيًا "[للاختبار فقط]" في عنوان بطاقتك. يساعد ذلك في التفريق بين البطاقات التجريبية والبطاقات المباشرة. بعد الحصول على موافقة الإنتاج من فريقنا، لن يتوفر نص إضافي لبطاقات الوضع التجريبي هذه عندما يعيد المستخدم فتح تطبيق المحفظة على جهاز متصل.

الخطوات التالية