Bu doküman, **kabuk uygulama** içerisinde **Web sayfa**larının açılmasını sağlayan **WebView Miniapp**'in **kabuk uygulama** ile iletişim kurmasını sağlayan yapıyı açıklar. Hem **iOS** hem de **Android** için desteklenen yöntemler aşağıda detaylı olarak anlatılmıştır.
**WebView Miniapp** içinde açılan web sayfaları, aşağıdaki **API**'leri kullanarak mobil uygulama ile etkileşime girebilir:
* **iOS** için: **window.webkit.messageHandlers.miniapp.postMessage(...)**,
* **Android** için: **window.miniapp.postMessage(..)**
Bu yapı kullanılarak aşağıdaki gibi işlemler yapılabilir:
* Kabuktan kullanıcıya ait bilgileri almak
* Native ödeme işlemini gerçekleştirmek
### :iphone: Desteklenen Platformlar
| Platform | Yöntem |
| -------- | ------------------------------------------------------ |
| iOS | window.webkit.messageHandlers.miniapp.postMessage(...) |
| Android | window.miniapp.postMessage(...) |
### ⚙️ Genel Kullanım Yapısı
#### iOS
```ts
window.webkit.messageHandlers.miniapp.postMessage(JSON.stringify({...payload});
```
#### Android
```ts
window.miniapp.postMessage(JSON.stringify({...payload}));
```
::: danger
**Android'de** postMessage fonksiyonu yalnızca **JSON string** alır. Bu nedenle **JSON.stringify()** kullanmanız gerekir.
:::
## ✅ Entegrasyon Adımları
### Webkit Handler'ların Kullanımı
Native tarafta aşağıdaki handler methodları tanımlıdır:
| Handler Adı | Çağırılan Method | Açıklama |
|:-----------:|:---------------------------:|:----------------------------------------------------------------------------------- |
| miniapp | GetIdentity | Kabuktan kullanıcının **bilgilerini** almayı sağlar **(async)** |
| miniapp | GetPhoneNumber | Kabuktan kullanıcının kayıtlı **Cep Telefonu Numarasını** almayı sağlar **(async)** |
| miniapp | GetMailAddress | Kabuktan kullanıcının kayıtlı **E-Mail Adresini** almayı sağlar **(async)** |
| miniapp | GetCustomerNumber | Kabuktan kullanıcının **Müşteri Numarasını** almayı sağlar **(async)** |
| miniapp | GetCommercialCustomerNumber | Kabuktan kullanıcının **Ticari Müşteri Numarasını** almayı sağlar **(async)** |
| miniapp | GetLocation | Kabuktan kullanıcının **Konum Bilgisini** almayı sağlar **(async)** |
| miniapp | sendPayment | Native **Ödeme** ekranını açar **(async)** |
### Kullanım Örnekleri
#### :card_file_box: GetIdentity Methodu İçin Kullanım Örneği
```js
let payload = {
"callFunction": {
"functionName": “GetIdentity”,
"param": {}
}
}
```
#### :phone: GetPhoneNumber Methodu İçin Kullanım Örneği
```js
let payload = {
"callFunction": {
"functionName": “GetPhoneNumber”,
"param": {}
}
}
```
#### :email: GetMailAddress Methodu İçin Kullanım Örneği
```js
let payload = {
"callFunction": {
"functionName": “GetMailAddress”,
"param": {}
}
}
```
#### :bust_in_silhouette: GetCustomerNumber Methodu İçin Kullanım Örneği
```js
let payload = {
"callFunction": {
"functionName": “GetCustomerNumber”,
"param": {}
}
}
```
#### :bust_in_silhouette: GetCommercialCustomerNumber Methodu İçin Kullanım Örneği
```js
let payload = {
"callFunction": {
"functionName": “GetCommercialCustomerNumber”,
"param": {}
}
}
```
#### :world_map: GetLocation Methodu İçin Kullanım Örneği
```js
let payload = {
"callFunction": {
"functionName": “GetLocation”,
"param": {}
}
}
```
#### :money_with_wings: sendPayment Methodu İçin Kullanım Örneği
```js
let payload = {
"callFunction": {
"functionName": "sendPayment",
"param": {
"amount": 100.45,
"orderId": "343432789721256274"
}
}
}
```
### Kabuktan Bilgi İstemek İçin Kullanılması Gereken Kod Örneği
```js
if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.miniapp) {
// iOS
window.webkit.messageHandlers.miniapp.postMessage(JSON.stringify(payload));
} else if (window.miniapp && window.miniapp.postMessage) {
// Android
window.miniapp.postMessage(JSON.stringify(payload));
}
```
### Kabuktan Gelen Cevabı Karşılamak İçin Kullanılması Gereken Method
```js
function functionCallback(functionName, result) {
switch (functionName) {
case "GetIdentity":
// Dönen değeri işlemek için eklenebilir method örneği
GetIdentityCallback(result);
break;
case "GetPhoneNumber":
// Dönen değeri işlemek için eklenebilir method örneği
GetPhoneNumberCallback(result);
break;
case "GetMailAddress":
// Dönen değeri işlemek için eklenebilir method örneği
GetMailAddressCallback(result);
break;
case "GetCustomerNumber":
// Dönen değeri işlemek için eklenebilir method örneği
GetCustomerNumberCallback(result);
break;
case "GetCommercialCustomerNumber":
// Dönen değeri işlemek için eklenebilir method örneği
GetCommercialCustomerNumberCallback(result);
break;
case "GetLocation":
// Dönen değeri işlemek için eklenebilir method örneği
GetLocationCallback(result);
break;
case "sendPayment":
// Dönen değeri işlemek için eklenebilir method örneği
sendPaymentCallback(result);
break;
default:
break;
}
}
```
### Kabuktan Gelen Cevabı Custom Method İçerisinde Kullanma Örnekleri
#### :card_file_box: GetIdentity İçin Gelen Cevabı Kullanma Örneği
```js
function GetIdentityCallback(result) {
try {
let parsedResult = JSON.parse(result);
if (parsedResult.isSuccess && parsedResult.retVal.isApproved) {
document.getElementById(“name”).innerHTML = parsedResult.retVal.funcRetVal.Name;
document.getElementById(“surname”).innerHTML = parsedResult.retVal.funcRetVal.Surname;
document.getElementById(“identityNumber”).innerHTML = parsedResult.retVal.funcRetVal.TCKN;
}
} catch(error) {
console.error('JSON verisi işlenirken bir hata oluştu:', error);
}
}
```
#### :phone: GetPhoneNumber İçin Gelen Cevabı Kullanma Örneği
```js
function GetPhoneNumberCallback(result) {
try {
let parsedResult = JSON.parse(result);
if (parsedResult.isSuccess && parsedResult.retVal.isApproved) {
document.getElementById(“phone”).innerHTML = parsedResult.retVal.funcRetVal.PhoneNumber;
}
} catch(error) {
console.error('JSON verisi işlenirken bir hata oluştu:', error);
}
}
```
#### :email: GetMailAddress İçin Gelen Cevabı Kullanma Örneği
```js
function GetMailAddressCallback(result) {
try {
let parsedResult = JSON.parse(result);
if (parsedResult.isSuccess && parsedResult.retVal.isApproved) {
document.getElementById(“mail”).innerHTML = parsedResult.retVal.funcRetVal.Email;
}
} catch(error) {
console.error('JSON verisi işlenirken bir hata oluştu:', error);
}
}
```
#### :bust_in_silhouette: GetCustomerNumber İçin Gelen Cevabı Kullanma Örneği
```js
function GetCustomerNumberCallback(result) {
try {
let parsedResult = JSON.parse(result);
if (parsedResult.isSuccess && parsedResult.retVal.isApproved) {
document.getElementById(“customerNumber”).innerHTML = parsedResult.retVal.funcRetVal.CustomerNumber;
}
} catch(error) {
console.error('JSON verisi işlenirken bir hata oluştu:', error);
}
}
```
#### :bust_in_silhouette: GetCommercialCustomerNumber İçin Gelen Cevabı Kullanma Örneği
```js
function GetCommercialCustomerNumberCallback(result) {
try {
let parsedResult = JSON.parse(result);
if (parsedResult.isSuccess && parsedResult.retVal.isApproved) {
document.getElementById(“commercialCustomerNumber”).innerHTML = parsedResult.retVal.funcRetVal.CommercialCustomerNumber;
}
} catch(error) {
console.error('JSON verisi işlenirken bir hata oluştu:', error);
}
}
```
#### :world_map: GetLocation İçin Gelen Cevabı Kullanma Örneği
```js
function GetLocationCallback(result) {
try {
let parsedResult = JSON.parse(result);
if (parsedResult.isSuccess && parsedResult.retVal.isApproved) {
document.getElementById("currentLocationResult").innerHTML = `Latitude: ${parsedResult.retVal.funcRetVal.coords.latitude}, Longitude: ${parsedResult.retVal.funcRetVal.coords.longitude}`;
}
} catch(error) {
console.error('JSON verisi işlenirken bir hata oluştu:', error);
}
}
```
#### :money_with_wings: sendPayment İçin Gelen Cevabı Kullanma Örneği
```js
function sendPaymentCallback(result) {
try {
let parsedResult = JSON.parse(result);
if (parsedResult.isSuccess) {
document.getElementById(“paymentResult”).innerHTML = parsedResult.retVal;
}
} catch(error) {
console.error('JSON verisi işlenirken bir hata oluştu:', error);
}
}
```
{"title":"WebView Entegrasyon Dokümanı","description":"HTML içerisindeki postAppMessage fonksiyonu, WebView üzerinden mobil cihazda bulunan native katman ile iletişim kurmayı sağlar. Bu fonksiyon, gönderilen mesajın mobil cihazda ilgili işleme yönlendirilmesi için kullanılır.","contributors":"[{\"id\":\"87466d80-1689-453c-9120-4dfcfdd93909\",\"add\":25322,\"del\":15866,\"latestUpdatedAt\":1757404136096},{\"id\":\"08f6ab4e-3ef3-4082-96f8-23f3b8ea7ffb\",\"add\":2,\"del\":0,\"latestUpdatedAt\":null}]"}