All Products
Search
Document Center

Mobile Platform as a Service:Gunakan SDK

Last Updated:Feb 05, 2026

Modul-modul terkait RPC adalah APMobileNetwork.framework dan MPMgsAdapter. Anda dapat menggunakan antarmuka dalam MPMgsAdapter.

Topik ini menjelaskan langkah-langkah penggunaan kit pengembangan perangkat lunak (SDK) Mobile Gateway Service:

  1. Inisialisasi layanan gateway

  2. Hasilkan kode RPC

  3. Kirim permintaan

  4. Sesuaikan konfigurasi permintaan

  5. Sesuaikan interceptor RPC

  6. Enkripsi data

Inisialisasi layanan gateway

Anda dapat memanggil metode berikut untuk menginisialisasi layanan gateway:

[MPRpcInterface initRpc];

Catatan saat melakukan upgrade dari versi sebelumnya

Mulai dari versi 10.1.32, Anda tidak perlu lagi menambahkan file Category untuk kelas DTRpcInterface karena lapisan tengah membaca konfigurasi dari meta.config. Setelah melakukan upgrade, periksa proyek Anda untuk konfigurasi dari versi sebelumnya dan hapus konfigurasi tersebut. Gambar berikut menunjukkan file Category untuk kelas DTRpcInterface yang harus Anda hapus.

gateway

Hasilkan kode RPC

Setelah aplikasi Anda terhubung ke layanan backend di Konsol Mobile Gateway Service, Anda dapat mengunduh kode RPC sisi client. Untuk informasi selengkapnya, lihat Hasilkan kode.

Kode RPC yang diunduh memiliki struktur sebagai berikut:

code structure

Di mana:

  • RPCDemoCloudpay_accountClient adalah konfigurasi RPC.

  • RPCDemoAuthLoginPostReq adalah model permintaan.

  • RPCDemoLoginResult adalah model respons.

Kirim permintaan

Anda dapat memanggil permintaan RPC di subthread menggunakan antarmuka panggilan subthread yang dikapsulkan dalam MPRpcInterface di lapisan tengah. Metode callback berjalan di thread utama secara default. Kode berikut memberikan contoh:

- (void)sendRpc
{
    __block RPCDemoLoginResult *result = nil;
    [MPRpcInterface callAsyncBlock:^{
        @try
        {
            RPCDemoLoginRequest *req = [[RPCDemoLoginRequest alloc] init];
            req.loginId = @"alipayAdmin";
            req.loginPassword = @"123456";
            RPCDemoAuthLoginPostReq *loginPostReq = [[RPCDemoAuthLoginPostReq alloc] init];
            loginPostReq._requestBody = req;
            RPCDemoCloudpay_accountClient *service = [[RPCDemoCloudpay_accountClient alloc] init];
            result = [service authLoginPost:loginPostReq];
        }
        @catch (NSException *exception) {
            NSLog(@"%@", exception);
            NSError *error = [userInfo objectForKey:@"kDTRpcErrorCauseError"];        // Dapatkan informasi pengecualian detail
            NSInteger code = error.code;        // Dapatkan kode kesalahan dari informasi pengecualian detail
        }
    } completion:^{
        NSString *str = @"";
        if (result && result.success) {
            str = @"Logon berhasil";
        } else {
            str = @"Logon gagal";
        }

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:str message:nil delegate:nil
                                              cancelButtonTitle:nil otherButtonTitles:@"ok", nil];
        [alert show];
    }];
}
Catatan

Tangani pengecualian Objective-C secara aman di Swift

Latar Belakang

Mekanisme penanganan kesalahan Swift (do-catch) berbeda dengan mekanisme penanganan pengecualian Objective-C (@try-@catch) pada level rendah. Akibatnya, kode Swift tidak dapat langsung menangkap NSException yang dilemparkan oleh kode Objective-C. Hal ini dapat menyebabkan aplikasi crash di lingkungan pemrograman campuran.

Solusi

Untuk mengatasi masalah ini dan memastikan stabilitas aplikasi, Anda dapat menggunakan tool APRpcExceptionCatch. Metode safeExecuteTry-nya mengenkapsulasi logika @try-@catch Objective-C. Hal ini memungkinkan Anda mengeksekusi panggilan RPC secara aman di lingkungan Swift.

Jika kode Objective-C melemparkan pengecualian selama eksekusi, safeExecuteTry akan menangkapnya dan mengembalikannya sebagai objek DTRpcException. Jika kode dieksekusi secara normal, metode ini mengembalikan nil.

Versi

Didukung mulai dari baseline versi 10.2.3.66 dan seterusnya.

Kode contoh

import MBProgressHUD
import APMobileNetwork

private func performGetIdRpcCall() {
    
    // 1. Tampilkan indikator pemuatan (awal asli dari executeRpc).
    MBProgressHUD.showAdded(to: self.view, animated: true)
    
    // 2. Definisikan variabel untuk menerima hasil dan kesalahan.
    var response: MPDemoUserInfo? // Ganti tipe generik T dengan tipe spesifik MPDemoUserInfo.
    var rpcError: DTRpcException?
    
    // 3. Eksekusi panggilan RPC secara asinkron (aslinya DTRpcAsyncCaller.callAsyncBlock).
    DTRpcAsyncCaller.callAsyncBlock({
        
        // 3.1. Eksekusi panggilan RPC aktual secara aman di thread latar belakang.
        rpcError = APRpcExceptionCatch.safeExecuteTry {
            // Ini adalah isi closure 'call' asli.
            let client = MPDemoRpcDemoClient()
            // Tetapkan hasil ke variabel respons.
            response = client.getIdGet(self.getRequest()) 
        }
        
    }, completion: {
        
        // 4. Tangani logika penyelesaian di thread utama.
        DispatchQueue.main.async {
            
            // 4.1. Sembunyikan indikator pemuatan.
            MBProgressHUD.hide(for: self.view, animated: true)
            
            // 4.2. Periksa apakah panggilan RPC mengalami kesalahan.
            if let exception = rpcError {
                // Jika terjadi kesalahan, buat dan tampilkan pesan kesalahan.
                var errorMsg: String
                if exception.code.rawValue == 0 {
                    if let realError = exception.userInfo?["kDTRpcErrorCauseError"] as? NSError {
                        let errorString = "Error: [Domain: \(realError.domain), Code: \(realError.code), Description: \(realError.localizedDescription)]"
                        errorMsg = "Rpc Exception: \(errorString)"
                    } else {
                        let cause = exception.userInfo?["kDTRpcErrorCauseError"]
                        errorMsg = "Rpc Exception code: \(exception.code), no real error: \(cause ?? "nil")"
                    }
                } else {
                    errorMsg = "Rpc Exception code: \(exception.code)"
                }
                
                // Tampilkan toast kesalahan.
                self.showErrorToast(message: errorMsg)
                
            } else {
                // 4.3. Jika panggilan berhasil, proses data yang dikembalikan.
                // Ini adalah isi closure 'success' asli.
                self.showAlert(title: "Data yang Dikembalikan", message: response?.description)
            }
        }
    })
}

Sesuaikan konfigurasi permintaan

DTRpcMethod menjelaskan metode permintaan RPC. Objek ini mencatat informasi tentang permintaan, seperti nama metode, parameter, dan tipe kembalian.

  • Jika Anda tidak perlu menambahkan signature saat mengirim permintaan, atur properti signCheck dari DTRpcMethod menjadi NO.

    -(MPDemoUserInfo *) dataPostSetTimeout:(MPDemoPostPostReq *)requestParam
    {
      DTRpcMethod *method = [[DTRpcMethod alloc] init];
      method.operationType = @"com.antcloud.request.post";
      method.checkLogin =  NO ;
      method.signCheck =  NO ;
      method.returnType =   @"@\"MPDemoUserInfo\"";
    
      return [[DTRpcClient defaultClient] executeMethod:method params:@[ ]];
    }
  • Untuk mengatur periode timeout, konfigurasikan properti timeoutInterval dari DTRpcMethod.

    -(MPDemoUserInfo *) dataPostSetTimeout:(MPDemoPostPostReq *)requestParam
    {
      DTRpcMethod *method = [[DTRpcMethod alloc] init];
      method.operationType = @"com.antcloud.request.post";
      method.checkLogin =  NO ;
      method.signCheck =  YES ;
       method.timeoutInterval = 1;     // Periode timeout ini adalah waktu hingga client menerima respons dari gateway. Periode timeout sisi server adalah waktu hingga respons dikembalikan dari sistem bisnis backend. Nilai default adalah 20 detik. Nilai kurang dari 1 tidak valid dan akan menggunakan nilai default.
      method.returnType =   @"@\"MPDemoUserInfo\"";
    
      return [[DTRpcClient defaultClient] executeMethod:method params:@[ ]];
    }
  • Untuk menambahkan header ke antarmuka, gunakan metode ekstensi berikut dari DTRpcClient.

    -(MPDemoUserInfo *) dataPostAddHeader:(MPDemoPostPostReq *)requestParam
    {
      DTRpcMethod *method = [[DTRpcMethod alloc] init];
      method.operationType = @"com.antcloud.request.postAddHeader";
      method.checkLogin =  NO ;
      method.signCheck =  YES ;
      method.returnType =   @"@\"MPDemoUserInfo\"";
    
      // Tambahkan header untuk antarmuka
      NSDictionary *customHeader = @{@"testKey": @"testValue"};
      return [[DTRpcClient defaultClient] executeMethod:method params:@[ ] requestHeaderField:customHeader responseHeaderFields:nil];
    }
  • Untuk menambahkan header ke semua antarmuka, Anda dapat menggunakan interceptor. Untuk informasi selengkapnya, lihat contoh kode Mobile Gateway Service.

  • Properti checkLogin digunakan untuk verifikasi session antarmuka. Verifikasi ini memerlukan konfigurasi di Konsol gateway. Secara default, properti ini diatur ke NO.

Sesuaikan interceptor RPC

Anda mungkin perlu memproses logika sebelum permintaan RPC dikirim atau setelah diproses. Modul RPC menyediakan mekanisme interceptor untuk tujuan ini.

Sesuaikan interceptor

Anda dapat membuat interceptor dan mengimplementasikan metode protokol <DTRpcInterceptor> untuk menangani operasi sebelum dan sesudah permintaan RPC.

@interface HXRpcInterceptor : NSObject<DTRpcInterceptor>

@end

@implementation HXRpcInterceptor

- (DTRpcOperation *)beforeRpcOperation:(DTRpcOperation *)operation{
    // TODO
    return operation;
}

- (DTRpcOperation *)afterRpcOperation:(DTRpcOperation *)operation{
   // TODO
   return operation;
}
@end

Daftarkan interceptor

Anda dapat memanggil antarmuka ekstensi lapisan tengah untuk mendaftarkan sub-interceptor kustom ke dalam wadah interceptor.

    HXRpcInterceptor *mpTestIntercaptor = [[HXRpcInterceptor alloc] init];    // Sub-interceptor kustom
    [MPRpcInterface addRpcInterceptor:mpTestIntercaptor];

Enkripsi data

RPC menyediakan beberapa fitur konfigurasi enkripsi data. Untuk informasi selengkapnya, lihat Enkripsi data.

Tautan terkait