Başlangıç

Başlangıç

Genel Açıklama

Uygulama üzerinden sdk’nın başlatılması ve multinet cüzdan seçme işleminin gerçekleşmesi için SDK’nın start metodu kullanılmalıdır.

Bu metod ile kullanıcı sdk’nın ekranlarına yönlendirilir. Kullanıcı, sdk ekranları üzerinden multinet hesabına giriş yapabilir ya da yeni hesap oluşturabilir.

  • Giriş başarılı ise cüzdanlarının listelendiği sayfaya yönlendirilir. Buradan kullanıcı yeni cüzdan ekleme işlemi veya cüzdan eşleştirme işlemi yapabilir.

  • Yeni hesap oluşturma seçildiyse kullanıcı “Kayıt Ol” ekranına yönlendirilir. Kullanıcı buradaki gerekli bilgileri doldurarak kayıt olma işlemini tamamlayabilir. Bu ekrandaki değerlerin dolu gelmesi isteniyorsa UserPreset ile bu değerler sağlanabilir. Kayıt olduktan sonra cüzdan ekleme sayfasına yönlendirilir. Cüzdan ekleme sonrasında ise cüzdan listeleme sayfası görüntülenir.

Cüzdan listeleme sayfasında “Cüzdan Eşleşitirme” aksiyonu ile sdk ekranları kapanır ve uygulamaya eşleştirilen cüzdana ait bir token (walletToken) bilgisi -BroadcastReceiver ve MultiPaySdkListener kullanılarak- dönülür.

Entegrasyonu yapan taraf bu walletToken bilgisini güvenli bir şekilde saklamalıdır. Bu token cüzdan ile ilgili işlemlerin tamamında kullanılacaktır.

Cüzdan değiştirme işlemi için de start metodu kullanılmalıdır. Bu işlem için metod parametrelerine ilave olarak daha önceden seçilmiş cüzdanın token bilgisi (walletToken) gönderilmelidir.

Tüm akış için gerekli kod entegrasyonu aşağıda örneklendirilmiştir.

Start metodu

  • // Login üzerinden cüzdan seçimi yapılması için örnek
    MultiPaySdk.start(context = this, walletToken = null, userPreset = null)
    // Varolan cüzdanın değişimi için örnek
    MultiPaySdk.start(context = this, walletToken = "sampleWalletToken", userPreset = null)
    // Register işleminde alanların dolu gelmesi için örnek
    val testPreset = UserPreset(
        name = "John",
        surname = "Doe",
        email = "john.doe@test.com",
        gsm = "5070000000"
    )
    MultiPaySdk.start(context = this, walletToken = "sampleWalletToken", userPreset = testPreset)
  • // Login üzerinden cüzdan seçimi yapılması için örnek
    MultiPaySdk.start(this, null);
    // Varolan cüzdanın değişimi için örnek
    MultiPaySdk.start(this, "sampleWalletToken");
    // Register işleminde alanların dolu gelmesi için örnek
    UserPreset testPreset = UserPreset(
        "John",
        "Doe",
        "john.doe@test.com",
        "5070000000"
    );
    MultiPaySdk.start(this, "sampleWalletToken", testPreset);

Methodun değişkenleri:

  • context : Activity veya Fragment’a ait context değeri

  • walletToken : Kullanıcı sdk üzerinden hiç cüzdan seçimi yapmamış ise ya da daha önceden seçtiği cüzdanının eşleştirmesini kaldırmış ise bu değer null olarak atanır. Aksi durumlarda mevcut walletToken değeri girilir.

  • userPreset (Opsiyonel): Kullanıcı kayıt olmak istediğinde UserPreset içerisinde tanımlanan değerler “Kayıt Ol” sayfası üzerinde otomatik olarak doldurulur. Bu özellik kullanılmak istenmiyorsa null olarak atanmalıdır. Aksi durumlarda UserPreset objesi oluşturularak verilir.

WalletToken bilgisinin alınması

Sdk üzerinden cüzdan eşleştirme tamamlandıktan sonra BroadcastReceiver ve MultiPaySdkListener ile uygulamaya token bilgisi dönülür.

Bunun için uygulama tarafında ilk olarak MultiPaySdkListener tanımı yapılmalıdır.

  • private var multiPaySdkListener = object : MultiPaySdkListener {
        override fun onTokenReceived(token: String) {
            Log.i(TAG, "walletToken: $token")
        }
    
        override fun onServiceError(error: String?, code: Int) {
            Log.i(TAG, "error = $error code = $code")
        }
    
        override fun onMultiPaySdkClosed() {}
    }
  • MultiPaySdkListener multiPaySdkListener = new MultiPaySdkListener() {
        @Override
        public void onTokenReceived(@NotNull String token) {
            Log.i(TAG, "walletToken = "+token);
        }
    
        @Override
        public void onServiceError(@org.jetbrains.annotations.Nullable String error, int code) {
            Log.i(TAG, "error code = "+code+"\nerror = "+error);
        }
    
        @Override
        public void onMultiPaySdkClosed() {
    
        }
    
        @Override
        public void onConfirmPaymentReceived(@NotNull String sign, @NotNull String transferServerRefNo) {
    
        }
    
        @Override
        public void onUnSelectWalletReceived(@org.jetbrains.annotations.Nullable UnselectWalletResponse unSelectWallet) {
    
        }
    
        @Override
        public void onSingeWalletReceived(@NotNull SingleWalletResponse singleWallet) {
    
        }
    };

Ardından MultiPaySdkReceiver sınıfından türetilmiş bir BroadcastReceiver oluşturulmalıdır. Ve daha önceden oluşturmuş olduğumuz MultiPaySdkListener objesi bu sınıfa parametre olarak gönderilmelidir.

  • import com.inventiv.multipaysdk.MultiPaySdkListener
    import com.inventiv.multipaysdk.receiver.MultiPaySdkReceiver
    
    class SampleReceiver(
        private val multipaySdkListener: MultiPaySdkListener
    ) : MultiPaySdkReceiver() {
    
        override fun onTokenReceived(token: String) {
            multipaySdkListener.onTokenReceived(token)
        }
    
        override fun sdkClosed() {
            multipaySdkListener.onMultiPaySdkClosed()
        }
    }
  • import com.inventiv.multipaysdk.MultiPaySdkListener;
    import com.inventiv.multipaysdk.receiver.MultiPaySdkReceiver;
    
    import org.jetbrains.annotations.NotNull;
    
    public class SampleReceiver extends MultiPaySdkReceiver {
    
        private MultiPaySdkListener multiPaySdkListener;
        
        public SampleReceiver(MultiPaySdkListener multiPaySdkListener) {
            this.multiPaySdkListener = multiPaySdkListener;
        }
    
        @Override
        protected void onTokenReceived(@NotNull String token) {
            multiPaySdkListener.onTokenReceived(token);
        }
    
        @Override
        protected void sdkClosed() {
            multiPaySdkListener.onMultiPaySdkClosed();
        }
    }

Son olarak tanımlamış olduğumuz BroadcastReceiver’ı kullanacağımız Activity veya Fragment tarafında initialize etmemiz gerekmektedir.

  • val sampleReceiver = SampleReceiver(multiPaySdkListener!!)
    val intentFilter = IntentFilter()
    intentFilter.addAction("com.inventiv.multipaysdk.intent.TOKEN_RECEIVED")
    intentFilter.addAction("com.inventiv.multipaysdk.intent.SDK_CLOSED")
    registerReceiver(sampleReceiver, intentFilter)
  • SampleReceiver sampleReceiver = new SampleReceiver(multiPaySdkListener);
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("com.inventiv.multipaysdk.intent.TOKEN_RECEIVED");
    intentFilter.addAction("com.inventiv.multipaysdk.intent.SDK_CLOSED");
    registerReceiver(sampleReceiver, intentFilter);

Bu tanımlamaların ardından sdk üzerinden eşleştirilen walletToken bilgisi uygulamada oluşturduğumuz MultiPaySdkListener objesi altındaki onTokenReceived metodunu tetikleyecek ve token bilgisi uygulamaya gelmiş olacaktır.

Not : Oluşabilecek memory leak’lerin engellenmesi için Activity ya da Fragment’ın sonlanması sırasında BroadcastReceiver ve MultiPaySdkListener değişkenleri temizlenmelidir.

  • override fun onDestroy() {
        multiPaySdkListener = null
        unregisterReceiver(sampleReceiver)
        super.onDestroy()
    }
  • @Override
    protected void onDestroy() {
        unregisterReceiver(sampleReceiver);
        multiPaySdkListener = null;
        super.onDestroy();
    }