{"id":37992,"date":"2026-01-21T03:30:46","date_gmt":"2026-01-21T00:30:46","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/"},"modified":"2026-01-21T03:30:46","modified_gmt":"2026-01-21T00:30:46","slug":"google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/","title":{"rendered":"Google ile iPhone Uygulamas\u0131ndan G\u00fcvenli \u00c7\u0131k\u0131\u015f (Yerel Metro Sunucusu ve Geli\u015ftirme Ortam\u0131) &#8211; B\u00f6l\u00fcm 7\/7: Oturumu Kapatma"},"content":{"rendered":"<h2>Google ile iPhone Uygulamas\u0131ndan G\u00fcvenli \u00c7\u0131k\u0131\u015f (Yerel Metro Sunucusu ve Geli\u015ftirme Ortam\u0131) &#8211; B\u00f6l\u00fcm 7\/7: Oturumu Kapatma<\/h2>\n<p>Google ile iPhone uygulamalar\u0131na giri\u015f yapmak, kullan\u0131c\u0131lar i\u00e7in hem pratik hem de g\u00fcvenli bir kimlik do\u011frulama y\u00f6ntemi sunar. Ancak, bir uygulaman\u0131n g\u00fcvenli\u011fi ve kullan\u0131c\u0131 gizlili\u011fi, sadece giri\u015f s\u00fcrecinin sa\u011flaml\u0131\u011f\u0131yla de\u011fil, ayn\u0131 zamanda oturum kapatma (logout) s\u00fcrecinin eksiksiz ve g\u00fcvenli bir \u015fekilde y\u00f6netilmesiyle de \u00f6l\u00e7\u00fcl\u00fcr. Bu serinin yedinci ve son b\u00f6l\u00fcm\u00fcnde, iPhone uygulaman\u0131zdan Google ile g\u00fcvenli bir \u015fekilde nas\u0131l \u00e7\u0131k\u0131\u015f yap\u0131laca\u011f\u0131n\u0131, yerel Metro sunucunuzdaki oturum bilgilerini nas\u0131l temizleyece\u011finizi ve Google taraf\u0131ndaki token&#8217;lar\u0131 nas\u0131l iptal edece\u011finizi detayl\u0131ca inceleyece\u011fiz. Bu, hem uygulaman\u0131z\u0131n g\u00fcvenli\u011fini art\u0131racak hem de kullan\u0131c\u0131lar\u0131n\u0131za daha iyi bir deneyim sunacakt\u0131r.<\/p>\n<h2>Oturumu Kapatman\u0131n \u00d6nemi ve Kapsam\u0131<\/h2>\n<p>Kullan\u0131c\u0131lar\u0131n bir uygulamadan \u00e7\u0131k\u0131\u015f yapabilmesi, temel bir g\u00fcvenlik ve gizlilik gereksinimidir. Oturum kapatma i\u015flemi sadece uygulaman\u0131n aray\u00fcz\u00fcnden &#8220;\u00e7\u0131k\u0131\u015f yap&#8221; d\u00fc\u011fmesine basmakla s\u0131n\u0131rl\u0131 kalmamal\u0131, ayn\u0131 zamanda arka planda da kapsaml\u0131 temizlik ve g\u00fcvenlik ad\u0131mlar\u0131n\u0131 i\u00e7ermelidir.<\/p>\n<h3>G\u00fcvenlik ve Gizlilik Perspektifi<\/h3>\n<p>Kullan\u0131c\u0131n\u0131n oturumu a\u00e7\u0131k kal\u0131rsa, cihaz\u0131n ba\u015fkalar\u0131n\u0131n eline ge\u00e7mesi durumunda yetkisiz eri\u015fim riski olu\u015fur. \u00d6zellikle payla\u015f\u0131lan cihazlarda veya halka a\u00e7\u0131k bilgisayarlarda bu risk daha da artar. G\u00fcvenli bir \u00e7\u0131k\u0131\u015f, kullan\u0131c\u0131n\u0131n hassas verilerinin korunmas\u0131n\u0131 sa\u011flar ve yetkisiz ki\u015filerin hesaba eri\u015fimini engeller. Ayr\u0131ca, kullan\u0131c\u0131n\u0131n uygulama ile olan ba\u011flant\u0131s\u0131n\u0131 sonland\u0131rarak gizlili\u011fini temin eder.<\/p>\n<h3>Kullan\u0131c\u0131 Deneyimi ve Y\u00f6netimi<\/h3>\n<p>Kullan\u0131c\u0131lar farkl\u0131 hesaplar aras\u0131nda ge\u00e7i\u015f yapmak isteyebilir veya cihazlar\u0131n\u0131 ba\u015fkalar\u0131yla payla\u015fabilirler. Net ve i\u015flevsel bir \u00e7\u0131k\u0131\u015f mekanizmas\u0131, bu senaryolarda sorunsuz bir deneyim sunar. Kullan\u0131c\u0131lar\u0131n kendi oturumlar\u0131n\u0131 y\u00f6netebilmeleri, uygulamaya olan g\u00fcvenlerini art\u0131r\u0131r ve daha iyi bir kullan\u0131c\u0131 deneyimi sa\u011flar.<\/p>\n<h3>\u00c7\u0131k\u0131\u015f T\u00fcrleri: Yerel ve Uzak<\/h3>\n<p>Oturum kapatma i\u015flemi genellikle iki ana bile\u015feni i\u00e7erir:<\/p>\n<ul>\n<li><strong>Yerel \u00c7\u0131k\u0131\u015f (Client-Side Logout):<\/strong> iPhone uygulamas\u0131n\u0131n kendi i\u00e7inde tuttu\u011fu kullan\u0131c\u0131 bilgilerini (kimlik do\u011frulama tokenlar\u0131, kullan\u0131c\u0131 profili verileri vb.) temizlemesi.<\/li>\n<li><strong>Uzak \u00c7\u0131k\u0131\u015f (Server-Side\/Remote Logout):<\/strong> Uygulaman\u0131n ba\u011fl\u0131 oldu\u011fu yerel Metro sunucusunda veya do\u011frudan Google&#8217;\u0131n kimlik do\u011frulama sunucular\u0131nda kullan\u0131c\u0131n\u0131n oturumunu ge\u00e7ersiz k\u0131lmak. Bu, \u00f6zellikle refresh token&#8217;lar\u0131n iptali i\u00e7in kritik \u00f6neme sahiptir.<\/li>\n<\/ul>\n<h2>iPhone Uygulamas\u0131nda Google Oturumunu Kapatma<\/h2>\n<p>iPhone uygulamas\u0131nda Google ile oturum kapatma, genellikle Google Sign-In SDK&#8217;s\u0131n\u0131n sa\u011flad\u0131\u011f\u0131 metodlar ve uygulaman\u0131n kendi yerel depolama alan\u0131n\u0131n temizlenmesiyle ger\u00e7ekle\u015ftirilir. React Native ve Expo ortam\u0131nda bu s\u00fcre\u00e7 olduk\u00e7a basittir.<\/p>\n<h3>Google Sign-In SDK ile \u00c7\u0131k\u0131\u015f<\/h3>\n<p><code>@react-native-google-signin\/google-signin<\/code> k\u00fct\u00fcphanesi, Google oturumunu kapatmak i\u00e7in iki temel metod sunar: <code>signOut()<\/code> ve <code>revokeAccess()<\/code>. Her ikisinin de farkl\u0131 ama\u00e7lar\u0131 vard\u0131r:<\/p>\n<ul>\n<li><strong><code>GoogleSignin.signOut()<\/code>:<\/strong> Bu metod, kullan\u0131c\u0131n\u0131n cihazdaki Google oturumunu sonland\u0131r\u0131r. Yani, kullan\u0131c\u0131n\u0131n Google hesab\u0131n\u0131n \u00f6nbelle\u011fe al\u0131nm\u0131\u015f kimlik bilgilerini temizler. Bir sonraki giri\u015fte kullan\u0131c\u0131dan tekrar hesap se\u00e7mesi veya \u015fifresini girmesi istenebilir. Ancak, bu metod Google&#8217;\u0131n sunucular\u0131ndaki eri\u015fim token&#8217;lar\u0131n\u0131 do\u011frudan iptal etmez.<\/li>\n<li><strong><code>GoogleSignin.revokeAccess()<\/code>:<\/strong> Bu metod ise \u00e7ok daha g\u00fc\u00e7l\u00fcd\u00fcr. Kullan\u0131c\u0131n\u0131n uygulaman\u0131za verdi\u011fi t\u00fcm izinleri iptal eder ve uygulaman\u0131z i\u00e7in verilen eri\u015fim (access) ve yenileme (refresh) token&#8217;lar\u0131n\u0131 Google&#8217;\u0131n sunucular\u0131nda ge\u00e7ersiz k\u0131lar. Bu, uygulaman\u0131z\u0131n art\u0131k kullan\u0131c\u0131n\u0131n Google hesab\u0131na eri\u015femeyece\u011fi anlam\u0131na gelir. Tamamen g\u00fcvenli bir \u00e7\u0131k\u0131\u015f i\u00e7in bu metodun kullan\u0131lmas\u0131 \u015fiddetle tavsiye edilir.<\/li>\n<\/ul>\n<h3>Yerel Uygulama Durumunun Temizlenmesi<\/h3>\n<p>Google oturumunu kapatman\u0131n yan\u0131 s\u0131ra, uygulaman\u0131z\u0131n kendi i\u00e7inde tuttu\u011fu kullan\u0131c\u0131ya ait t\u00fcm verileri de temizlemeniz gerekir. Bu veriler \u015funlar\u0131 i\u00e7erebilir:<\/p>\n<ul>\n<li><strong>Kimlik Do\u011frulama Tokenlar\u0131:<\/strong> Uygulaman\u0131z\u0131n kendi sunucusundan ald\u0131\u011f\u0131 oturum tokenlar\u0131 (JWT vb.).<\/li>\n<li><strong>Kullan\u0131c\u0131 Profili Bilgileri:<\/strong> Redux store, Context API veya AsyncStorage gibi yerel depolama alanlar\u0131nda tutulan kullan\u0131c\u0131 ad\u0131, e-posta, profil foto\u011fraf\u0131 URL&#8217;si gibi bilgiler.<\/li>\n<li><strong>Uygulama \u0130\u00e7i Ayarlar:<\/strong> Kullan\u0131c\u0131ya \u00f6zel ayarlar\u0131n temizlenmesi veya varsay\u0131lan de\u011ferlere d\u00f6nd\u00fcr\u00fclmesi.<\/li>\n<\/ul>\n<p>Bu verilerin temizlenmesi, uygulaman\u0131n oturum kapat\u0131ld\u0131ktan sonra eski kullan\u0131c\u0131ya ait bilgileri g\u00f6stermesini engeller ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 \u00f6nler.<\/p>\n<h3>\u00d6rnek React Native Kodu (Expo\/Google Sign-In)<\/h3>\n<p>A\u015fa\u011f\u0131da, bir React Native uygulamas\u0131nda Google ile g\u00fcvenli \u00e7\u0131k\u0131\u015f i\u015flemini ger\u00e7ekle\u015ftiren \u00f6rnek bir kod blo\u011fu bulunmaktad\u0131r:<\/p>\n<pre><code class=\"language-javascript\">\nimport React from 'react';\nimport { View, Text, Button, Alert } from 'react-native';\nimport { GoogleSignin } from '@react-native-google-signin\/google-signin';\nimport AsyncStorage from '@react-native-async-storage\/async-storage';\n\n\/\/ Varsayal\u0131m ki bu fonksiyon, sunucunuza \u00e7\u0131k\u0131\u015f iste\u011fi g\u00f6nderiyor\nconst logoutFromServer = async (token) => {\n  try {\n    const response = await fetch('http:\/\/localhost:3000\/api\/logout', {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application\/json',\n        'Authorization': <code>Bearer ${token}<\/code> \/\/ Sunucunuzdan ald\u0131\u011f\u0131n\u0131z oturum token'\u0131\n      },\n    });\n    if (!response.ok) {\n      throw new Error('Sunucudan \u00e7\u0131k\u0131\u015f yap\u0131lamad\u0131');\n    }\n    console.log('Sunucudan ba\u015far\u0131yla \u00e7\u0131k\u0131\u015f yap\u0131ld\u0131.');\n    return true;\n  } catch (error) {\n    console.error('Sunucudan \u00e7\u0131k\u0131\u015f hatas\u0131:', error);\n    return false;\n  }\n};\n\nconst handleLogout = async () => {\n  try {\n    \/\/ 1. Google oturumunu kapat (yerel)\n    await GoogleSignin.signOut();\n    console.log('Google SignOut ba\u015far\u0131l\u0131.');\n\n    \/\/ 2. Google'dan uygulaman\u0131n eri\u015fimini iptal et (token iptali)\n    await GoogleSignin.revokeAccess();\n    console.log('Google RevokeAccess ba\u015far\u0131l\u0131.');\n\n    \/\/ 3. Yerel depolamadaki t\u00fcm kullan\u0131c\u0131 verilerini temizle\n    await AsyncStorage.removeItem('userToken'); \/\/ \u00d6rn: Kendi sunucunuzdan gelen token\n    await AsyncStorage.removeItem('userData');  \/\/ \u00d6rn: Kullan\u0131c\u0131 profili bilgileri\n    \/\/ Redux\/Context state'lerini de temizlemeyi unutmay\u0131n\n    console.log('Yerel depolama temizlendi.');\n\n    \/\/ 4. (Opsiyonel) Sunucuya \u00e7\u0131k\u0131\u015f iste\u011fi g\u00f6nder\n    \/\/ const serverToken = await AsyncStorage.getItem('userToken'); \/\/ Sunucu token'\u0131n\u0131 al\n    \/\/ if (serverToken) {\n    \/\/   await logoutFromServer(serverToken);\n    \/\/ }\n\n    Alert.alert('Ba\u015far\u0131l\u0131', 'Oturumunuz g\u00fcvenli bir \u015fekilde kapat\u0131ld\u0131.');\n    \/\/ Kullan\u0131c\u0131y\u0131 giri\u015f ekran\u0131na y\u00f6nlendir\n    \/\/ navigation.navigate('Login');\n\n  } catch (error) {\n    console.error('Oturum kapatma hatas\u0131:', error);\n    Alert.alert('Hata', 'Oturum kapat\u0131l\u0131rken bir sorun olu\u015ftu.');\n  }\n};\n\nconst LogoutScreen = () => {\n  return (\n    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>\n      <Text style={{ marginBottom: 20, fontSize: 18 }}>\u00c7\u0131k\u0131\u015f yapmak i\u00e7in t\u0131klay\u0131n<\/Text>\n      <Button title=\"G\u00fcvenli \u00c7\u0131k\u0131\u015f Yap\" onPress={handleLogout} \/>\n    <\/View>\n  );\n};\n\nexport default LogoutScreen;\n<\/pre>\n<p><\/code><\/p>\n<h2>Yerel Metro Sunucusunda Oturum Temizli\u011fi<\/h2>\n<p>Uygulaman\u0131z\u0131n bir arka u\u00e7 sunucusu (yerel Metro sunucusu veya ba\u015fka bir API) ile ileti\u015fim kurdu\u011fu durumlarda, kullan\u0131c\u0131 \u00e7\u0131k\u0131\u015f yapt\u0131\u011f\u0131nda sunucu taraf\u0131ndaki oturum bilgilerinin de temizlenmesi \u00f6nemlidir. Bu, \u00f6zellikle uygulaman\u0131z\u0131n kendi kimlik do\u011frulama mekanizmas\u0131n\u0131 (\u00f6rne\u011fin JWT) kullan\u0131yorsa veya kullan\u0131c\u0131n\u0131n oturum durumunu sunucuda tutuyorsa ge\u00e7erlidir.<\/p>\n<h3>Sunucu Taraf\u0131nda Token Ge\u00e7ersiz K\u0131lma<\/h3>\n<p>E\u011fer sunucunuz kullan\u0131c\u0131lara oturum tokenlar\u0131 (\u00f6rne\u011fin JWT) veriyorsa, \u00e7\u0131k\u0131\u015f i\u015flemi s\u0131ras\u0131nda bu tokenlar\u0131n ge\u00e7ersiz k\u0131l\u0131nmas\u0131 gerekebilir. JWT'ler varsay\u0131lan olarak sunucu taraf\u0131nda saklanmaz ve dolay\u0131s\u0131yla do\u011frudan iptal edilemez. Ancak, \"kara liste\" (blacklist) mekanizmas\u0131 kullanarak s\u00fcresi dolmam\u0131\u015f tokenlar\u0131 ge\u00e7ersiz k\u0131labilirsiniz. Sunucu, gelen her iste\u011fi i\u015flerken token\u0131n kara listede olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. Kara listede olan tokenlar reddedilir.<\/p>\n<p>Alternatif olarak, e\u011fer sunucunuz oturumlar\u0131 veritaban\u0131nda tutuyorsa, \u00e7\u0131k\u0131\u015f iste\u011fi geldi\u011finde ilgili oturum kayd\u0131n\u0131 silebilirsiniz.<\/p>\n<h3>Kullan\u0131c\u0131 Verilerinin Temizlenmesi (Opsiyonel)<\/h3>\n<p>Baz\u0131 senaryolarda, kullan\u0131c\u0131n\u0131n \u00e7\u0131k\u0131\u015f yapmas\u0131yla birlikte sunucuda tutulan ge\u00e7ici veya \u00f6nbelle\u011fe al\u0131nm\u0131\u015f kullan\u0131c\u0131 verilerinin de temizlenmesi istenebilir. Bu, genellikle kullan\u0131c\u0131n\u0131n gizlili\u011fini art\u0131rmak veya sunucu kaynaklar\u0131n\u0131 optimize etmek amac\u0131yla yap\u0131l\u0131r.<\/p>\n<h3>\u00d6rnek Sunucu Kodu (Node.js\/Express)<\/h3>\n<p>A\u015fa\u011f\u0131da, basit bir Node.js\/Express sunucusunda token kara listesi kullanarak \u00e7\u0131k\u0131\u015f i\u015flemini g\u00f6steren bir \u00f6rnek bulunmaktad\u0131r. Bu \u00f6rnekte, bir JWT'nin ge\u00e7erlili\u011fini kontrol eden ve \u00e7\u0131k\u0131\u015f yap\u0131ld\u0131\u011f\u0131nda onu kara listeye alan bir mekanizma d\u00fc\u015f\u00fcn\u00fclm\u00fc\u015ft\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ app.js veya authRoutes.js\nconst express = require('express');\nconst jwt = require('jsonwebtoken');\nconst router = express.Router();\n\n\/\/ Basit bir kara liste (ger\u00e7ek uygulamada bir veritaban\u0131 kullan\u0131lmal\u0131)\nconst tokenBlacklist = new Set();\n\n\/\/ Middleware: Token do\u011frulama\nconst authenticateToken = (req, res, next) => {\n  const authHeader = req.headers['authorization'];\n  const token = authHeader && authHeader.split(' ')[1];\n\n  if (token == null) return res.sendStatus(401);\n\n  if (tokenBlacklist.has(token)) {\n    return res.status(401).send('Token ge\u00e7ersiz veya iptal edildi.');\n  }\n\n  jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) => {\n    if (err) return res.sendStatus(403);\n    req.user = user;\n    next();\n  });\n};\n\n\/\/ \u00c7\u0131k\u0131\u015f (Logout) endpoint'i\nrouter.post('\/api\/logout', authenticateToken, (req, res) => {\n  const authHeader = req.headers['authorization'];\n  const token = authHeader && authHeader.split(' ')[1];\n\n  if (token) {\n    tokenBlacklist.add(token); \/\/ Token'\u0131 kara listeye ekle\n    \/\/ Ger\u00e7ek bir uygulamada, token'\u0131n s\u00fcresinin ne zaman dolaca\u011f\u0131n\u0131 da saklay\u0131p\n    \/\/ kara listeden otomatik olarak kald\u0131rmak i\u00e7in bir mekanizma kurulabilir.\n    res.status(200).send('Ba\u015far\u0131yla \u00e7\u0131k\u0131\u015f yap\u0131ld\u0131.');\n  } else {\n    res.status(400).send('Token bulunamad\u0131.');\n  }\n});\n\n\/\/ Di\u011fer route'lar...\nrouter.get('\/api\/protected', authenticateToken, (req, res) => {\n  res.json({ message: 'Bu korumal\u0131 bir kaynak!', user: req.user });\n});\n\nmodule.exports = router;\n<\/pre>\n<p><\/code><\/p>\n<h2>Google Taraf\u0131nda Token \u0130ptali (Revocation)<\/h2>\n<p>Google taraf\u0131nda token iptali, bir kullan\u0131c\u0131n\u0131n uygulaman\u0131za verdi\u011fi yetkileri tamamen geri \u00e7ekmek anlam\u0131na gelir. Bu, \u00f6zellikle uygulaman\u0131z\u0131n kullan\u0131c\u0131n\u0131n Google hesab\u0131na eri\u015fiminin tamamen kesilmesi gereken durumlarda kritik \u00f6neme sahiptir.<\/p>\n<h3>Access Token ve Refresh Token \u0130ptali<\/h3>\n<ul>\n<li><strong>Access Token:<\/strong> K\u0131sa \u00f6m\u00fcrl\u00fcd\u00fcr ve belirli bir s\u00fcre sonra ge\u00e7erlili\u011fini yitirir. Google API'lerine eri\u015fim i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><strong>Refresh Token:<\/strong> Uzun \u00f6m\u00fcrl\u00fcd\u00fcr ve yeni access token'lar almak i\u00e7in kullan\u0131l\u0131r. Refresh token'\u0131n iptali, uygulaman\u0131z\u0131n kullan\u0131c\u0131n\u0131n izni olmadan yeni access token almas\u0131n\u0131 engeller.<\/li>\n<\/ul>\n<p><code>GoogleSignin.revokeAccess()<\/code> metodu, hem mevcut access token'\u0131 hem de ili\u015fkili refresh token'\u0131 Google'\u0131n sunucular\u0131nda iptal eder. Bu, uygulaman\u0131z\u0131n gelecekte kullan\u0131c\u0131n\u0131n Google hesab\u0131na eri\u015fimini tamamen keser.<\/p>\n<h3>Neden Gerekli?<\/h3>\n<p><code>revokeAccess()<\/code> kullan\u0131m\u0131, uygulaman\u0131z\u0131n g\u00fcvenli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r:<\/p>\n<ul>\n<li><strong>Yetkisiz Eri\u015fim \u00d6nleme:<\/strong> E\u011fer bir access token veya refresh token bir \u015fekilde ele ge\u00e7irilirse, <code>revokeAccess()<\/code> \u00e7a\u011fr\u0131s\u0131 bu token'lar\u0131 an\u0131nda ge\u00e7ersiz k\u0131lar ve yetkisiz eri\u015fimi engeller.<\/li>\n<li><strong>Kullan\u0131c\u0131 Kontrol\u00fc:<\/strong> Kullan\u0131c\u0131lara, uygulamalar\u0131n\u0131za verdikleri izinleri tamamen geri \u00e7ekme yetene\u011fi sunar. Bu, gizlilik ve g\u00fcvenlik bilinci y\u00fcksek kullan\u0131c\u0131lar i\u00e7in \u00f6nemlidir.<\/li>\n<li><strong>Uygulama Silme Senaryolar\u0131:<\/strong> Kullan\u0131c\u0131 uygulamay\u0131 cihaz\u0131ndan sildi\u011finde veya hesab\u0131n\u0131 kapatt\u0131\u011f\u0131nda, Google taraf\u0131ndaki yetkilerin de iptal edilmesi iyi bir uygulamad\u0131r.<\/li>\n<\/ul>\n<h3>Google API'leri ile Token \u0130ptali<\/h3>\n<p>E\u011fer sunucu taraf\u0131nda Google token'lar\u0131n\u0131 y\u00f6netiyorsan\u0131z (\u00f6rne\u011fin, refresh token'lar\u0131 veritaban\u0131nda saklay\u0131p kendi sunucunuz \u00fczerinden yeni access token'lar al\u0131yorsan\u0131z), bu token'lar\u0131 Google'\u0131n kendi API'leri arac\u0131l\u0131\u011f\u0131yla da iptal edebilirsiniz. Google OAuth 2.0 API'si, token iptali i\u00e7in bir endpoint sunar:<\/p>\n<pre><code class=\"language-http\">\nPOST \/oauth2\/revoke HTTP\/1.1\nHost: oauth2.googleapis.com\nContent-Type: application\/x-www-form-urlencoded\n\ntoken={token_to_revoke}\n<\/pre>\n<p><\/code><\/p>\n<p>Burada <code>{token_to_revoke}<\/code>, iptal etmek istedi\u011finiz access token veya refresh token olabilir. Ancak, mobil uygulamalar i\u00e7in <code>GoogleSignin.revokeAccess()<\/code> metodunu kullanmak genellikle daha pratik ve yeterlidir.<\/p>\n<h2>Hata Y\u00f6netimi ve Kullan\u0131c\u0131 Bildirimleri<\/h2>\n<p>Oturum kapatma i\u015flemi s\u0131ras\u0131nda olu\u015fabilecek hatalar\u0131 y\u00f6netmek ve kullan\u0131c\u0131ya do\u011fru geri bildirimde bulunmak, g\u00fcvenli ve kullan\u0131c\u0131 dostu bir uygulama i\u00e7in hayati \u00f6neme sahiptir.<\/p>\n<h3>Ba\u015far\u0131l\u0131\/Ba\u015far\u0131s\u0131z \u00c7\u0131k\u0131\u015f Senaryolar\u0131<\/h3>\n<p>\u00c7\u0131k\u0131\u015f i\u015flemi s\u0131ras\u0131nda \u00e7e\u015fitli sorunlar ortaya \u00e7\u0131kabilir:<\/p>\n<ul>\n<li><strong>A\u011f Ba\u011flant\u0131s\u0131 Sorunlar\u0131:<\/strong> Kullan\u0131c\u0131n\u0131n internet ba\u011flant\u0131s\u0131 yoksa, Google veya sunucuya yap\u0131lan \u00e7\u0131k\u0131\u015f istekleri ba\u015far\u0131s\u0131z olabilir.<\/li>\n<li><strong>Sunucu Hatalar\u0131:<\/strong> Yerel Metro sunucusunda veya Google API'lerinde ge\u00e7ici sorunlar ya\u015fanabilir.<\/li>\n<li><strong>Token Ge\u00e7ersizli\u011fi:<\/strong> Zaten ge\u00e7ersiz k\u0131l\u0131nm\u0131\u015f bir token'\u0131 iptal etmeye \u00e7al\u0131\u015fmak.<\/li>\n<\/ul>\n<p>Bu senaryolar\u0131 ele almak i\u00e7in <code>try-catch<\/code> bloklar\u0131 kullanmak ve farkl\u0131 hata t\u00fcrlerine g\u00f6re kullan\u0131c\u0131ya bilgi vermek \u00f6nemlidir.<\/p>\n<h3>Kullan\u0131c\u0131ya Geri Bildirim<\/h3>\n<p>\u00c7\u0131k\u0131\u015f i\u015fleminin sonucunu kullan\u0131c\u0131ya a\u00e7\u0131k\u00e7a bildirmek gerekir. Ba\u015far\u0131l\u0131 bir \u00e7\u0131k\u0131\u015fta \"Oturumunuz g\u00fcvenli bir \u015fekilde kapat\u0131ld\u0131\" gibi bir mesaj, kullan\u0131c\u0131ya g\u00fcvence verir. Ba\u015far\u0131s\u0131z bir \u00e7\u0131k\u0131\u015fta ise \"Oturum kapat\u0131l\u0131rken bir sorun olu\u015ftu, l\u00fctfen tekrar deneyin\" veya \"\u0130nternet ba\u011flant\u0131n\u0131z\u0131 kontrol edin\" gibi y\u00f6nlendirici mesajlar sunulmal\u0131d\u0131r. React Native'de <code>Alert<\/code> veya \u00f6zel bildirim bile\u015fenleri kullan\u0131labilir.<\/p>\n<h3>Loglama ve \u0130zleme<\/h3>\n<p>Geli\u015ftirme ortam\u0131nda (ve \u00fcretimde), \u00e7\u0131k\u0131\u015f i\u015flemleriyle ilgili hatalar\u0131 ve ba\u015far\u0131lar\u0131 loglamak, sorun giderme ve uygulaman\u0131n genel sa\u011fl\u0131\u011f\u0131n\u0131 izlemek i\u00e7in \u00e7ok \u00f6nemlidir. Sunucu taraf\u0131nda da \u00e7\u0131k\u0131\u015f isteklerinin ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 veya hangi tokenlar\u0131n kara listeye al\u0131nd\u0131\u011f\u0131n\u0131 kaydetmek faydal\u0131d\u0131r.<\/p>\n<h2>En \u0130yi Uygulamalar ve G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h2>\n<p>Google ile iPhone uygulamas\u0131ndan \u00e7\u0131k\u0131\u015f yaparken g\u00f6z \u00f6n\u00fcnde bulundurman\u0131z gereken baz\u0131 en iyi uygulamalar ve g\u00fcvenlik ipu\u00e7lar\u0131:<\/p>\n<h3>Otomatik \u00c7\u0131k\u0131\u015f Mekanizmalar\u0131<\/h3>\n<p>Belirli bir s\u00fcre (\u00f6rne\u011fin 15-30 dakika) hareketsizlikten sonra kullan\u0131c\u0131y\u0131 otomatik olarak \u00e7\u0131k\u0131\u015f yapmaya zorlamak, \u00f6zellikle hassas verilerle \u00e7al\u0131\u015fan uygulamalar i\u00e7in iyi bir g\u00fcvenlik \u00f6nlemidir. Bu, uygulaman\u0131n arka planda \u00e7al\u0131\u015f\u0131rken veya cihaz\u0131n kilidi a\u00e7\u0131k b\u0131rak\u0131ld\u0131\u011f\u0131nda yetkisiz eri\u015fimi engeller.<\/p>\n<h3>\u00c7oklu Cihaz \u00c7\u0131k\u0131\u015f\u0131<\/h3>\n<p>E\u011fer uygulaman\u0131z \u00e7oklu cihaz deste\u011fi sunuyorsa, bir cihazdan \u00e7\u0131k\u0131\u015f yap\u0131ld\u0131\u011f\u0131nda kullan\u0131c\u0131n\u0131n di\u011fer t\u00fcm cihazlardaki oturumlar\u0131n\u0131 da sonland\u0131rma se\u00e7ene\u011fi sunmak, g\u00fcvenlik a\u00e7\u0131s\u0131ndan b\u00fcy\u00fck bir art\u0131d\u0131r. Bu, sunucu taraf\u0131nda her kullan\u0131c\u0131 i\u00e7in aktif oturumlar\u0131 takip ederek ve bir \u00e7\u0131k\u0131\u015f iste\u011fi geldi\u011finde t\u00fcm ili\u015fkili oturum tokenlar\u0131n\u0131 ge\u00e7ersiz k\u0131larak yap\u0131labilir.<\/p>\n<h3>G\u00fcvenli Token Saklama ve Temizleme<\/h3>\n<p>Uygulaman\u0131z\u0131n kendi sunucusundan ald\u0131\u011f\u0131 oturum tokenlar\u0131n\u0131 (JWT gibi) ve Google'dan ald\u0131\u011f\u0131 refresh token'lar\u0131 her zaman g\u00fcvenli bir \u015fekilde saklay\u0131n (\u00f6rne\u011fin iOS Keychain veya React Native i\u00e7in <code>react-native-keychain<\/code>). \u00c7\u0131k\u0131\u015f i\u015flemi s\u0131ras\u0131nda bu token'lar\u0131n tamamen temizlendi\u011finden emin olun. Asla hassas token'lar\u0131 <code>AsyncStorage<\/code> gibi \u015fifrelenmemi\u015f depolama alanlar\u0131nda tutmay\u0131n.<\/p>\n<p><strong>Tablo: Google Sign-In \u00c7\u0131k\u0131\u015f Metodlar\u0131 Kar\u015f\u0131la\u015ft\u0131rmas\u0131<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Metod<\/th>\n<th>A\u00e7\u0131klama<\/th>\n<th>Etki Alan\u0131<\/th>\n<th>G\u00fcvenlik D\u00fczeyi<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>GoogleSignin.signOut()<\/code><\/td>\n<td>Cihazdaki Google hesab\u0131n\u0131n oturumunu kapat\u0131r, \u00f6nbelle\u011fi temizler.<\/td>\n<td>Yaln\u0131zca istemci (cihaz)<\/td>\n<td>Orta (Yerel oturumu sonland\u0131r\u0131r)<\/td>\n<\/tr>\n<tr>\n<td><code>GoogleSignin.revokeAccess()<\/code><\/td>\n<td>Uygulamaya verilen t\u00fcm Google izinlerini iptal eder, access ve refresh token'lar\u0131 Google sunucular\u0131nda ge\u00e7ersiz k\u0131lar.<\/td>\n<td>\u0130stemci ve Google sunucular\u0131<\/td>\n<td>Y\u00fcksek (Tam yetki iptali)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Sonu\u00e7<\/h2>\n<p>Google ile iPhone uygulamas\u0131na giri\u015f yapmak kadar, g\u00fcvenli bir \u015fekilde \u00e7\u0131k\u0131\u015f yapmak da uygulaman\u0131z\u0131n b\u00fct\u00fcnsel g\u00fcvenli\u011fi ve kullan\u0131c\u0131 deneyimi i\u00e7in kritik bir ad\u0131md\u0131r. Bu makalede ele ald\u0131\u011f\u0131m\u0131z ad\u0131mlar \u2013 istemci taraf\u0131nda Google oturumunu kapatma ve yerel verileri temizleme, yerel Metro sunucusunda oturumlar\u0131 ge\u00e7ersiz k\u0131lma ve Google taraf\u0131nda token'lar\u0131 iptal etme \u2013 kapsaml\u0131 bir \u00e7\u0131k\u0131\u015f mekanizmas\u0131 olu\u015fturman\u0131n temel ta\u015flar\u0131d\u0131r. Bu serinin son b\u00f6l\u00fcm\u00fcyle birlikte, Google ile iPhone uygulamas\u0131nda g\u00fcvenli kimlik do\u011frulama s\u00fcrecinin t\u00fcm a\u015famalar\u0131n\u0131 tamamlam\u0131\u015f bulunuyoruz. Unutmay\u0131n ki g\u00fcvenlik, s\u00fcrekli bir s\u00fcre\u00e7tir ve en iyi uygulamalar\u0131 takip etmek, kullan\u0131c\u0131lar\u0131n\u0131z\u0131n verilerini koruman\u0131n en iyi yoludur.<\/p>\n<h2>SSS (S\u0131k Sorulan Sorular)<\/h2>\n<h3>1. <code>GoogleSignin.signOut()<\/code> ve <code>GoogleSignin.revokeAccess()<\/code> aras\u0131ndaki temel fark nedir?<\/h3>\n<p><code>GoogleSignin.signOut()<\/code>, kullan\u0131c\u0131n\u0131n cihazdaki Google oturumunu sonland\u0131r\u0131r ve \u00f6nbelle\u011fi temizler. Bir sonraki giri\u015fte kullan\u0131c\u0131dan tekrar hesap se\u00e7mesi istenebilir. Ancak, uygulaman\u0131z\u0131n Google hesab\u0131na eri\u015fim izinlerini iptal etmez. <code>GoogleSignin.revokeAccess()<\/code> ise \u00e7ok daha kapsaml\u0131d\u0131r; uygulaman\u0131za verilen t\u00fcm Google izinlerini iptal eder ve hem access hem de refresh token'lar\u0131n\u0131 Google sunucular\u0131nda ge\u00e7ersiz k\u0131lar. Bu, uygulaman\u0131z\u0131n art\u0131k kullan\u0131c\u0131n\u0131n Google hesab\u0131na eri\u015femeyece\u011fi anlam\u0131na gelir ve tam g\u00fcvenlik i\u00e7in \u00f6nerilir.<\/p>\n<h3>2. Neden hem istemci hem de sunucudan \u00e7\u0131k\u0131\u015f yapmal\u0131y\u0131z?<\/h3>\n<p>\u0130stemciden \u00e7\u0131k\u0131\u015f yapmak, uygulaman\u0131n yerel olarak tuttu\u011fu kullan\u0131c\u0131 verilerini ve Google oturumunu temizler. Sunucudan \u00e7\u0131k\u0131\u015f yapmak ise, e\u011fer uygulaman\u0131z\u0131n kendi kimlik do\u011frulama mekanizmas\u0131 varsa (\u00f6rne\u011fin JWT veya oturum y\u00f6netimi), sunucudaki oturum token'\u0131n\u0131 veya kayd\u0131n\u0131 ge\u00e7ersiz k\u0131larak yetkisiz eri\u015fimi engeller. Her iki taraf\u0131n da temizlenmesi, uygulaman\u0131n genel g\u00fcvenli\u011fini ve kullan\u0131c\u0131 gizlili\u011fini en \u00fcst d\u00fczeye \u00e7\u0131kar\u0131r.<\/p>\n<h3>3. Kullan\u0131c\u0131 internet ba\u011flant\u0131s\u0131 yokken \u00e7\u0131k\u0131\u015f yapabilir mi?<\/h3>\n<p>Kullan\u0131c\u0131, internet ba\u011flant\u0131s\u0131 olmasa bile uygulaman\u0131n yerel depolama alan\u0131ndaki verilerini temizleyebilir ve Google Sign-In SDK's\u0131n\u0131n yerel oturumunu kapatabilir. Ancak, <code>GoogleSignin.revokeAccess()<\/code> gibi Google sunucular\u0131yla etkile\u015fime giren veya yerel Metro sunucusuna g\u00f6nderilen \u00e7\u0131k\u0131\u015f istekleri, internet ba\u011flant\u0131s\u0131 olmadan ba\u015far\u0131s\u0131z olacakt\u0131r. Bu durumda kullan\u0131c\u0131ya bir hata mesaj\u0131 g\u00f6sterilmeli ve ba\u011flant\u0131 kuruldu\u011funda i\u015flemi tekrar denemesi tavsiye edilmelidir.<\/p>\n<h3>4. \u00c7\u0131k\u0131\u015f yaparken hangi veriler temizlenmelidir?<\/h3>\n<p>\u00c7\u0131k\u0131\u015f yaparken temizlenmesi gereken ba\u015fl\u0131ca veriler \u015funlard\u0131r: Google taraf\u0131ndan verilen access ve refresh token'lar, uygulaman\u0131z\u0131n kendi sunucusundan ald\u0131\u011f\u0131 oturum token'lar\u0131 (JWT), yerel depolama (AsyncStorage, Keychain) veya durum y\u00f6netimi (Redux, Context) sistemlerinde tutulan kullan\u0131c\u0131 profili bilgileri, hassas uygulama i\u00e7i ayarlar ve di\u011fer \u00f6nbelle\u011fe al\u0131nm\u0131\u015f kullan\u0131c\u0131ya \u00f6zel veriler.<\/p>\n<h3>5. Refresh token'\u0131 iptal etmek neden \u00f6nemlidir?<\/h3>\n<p>Refresh token'lar, uygulaman\u0131z\u0131n s\u00fcresi dolmu\u015f access token'lar\u0131 yenilemek i\u00e7in kulland\u0131\u011f\u0131 uzun \u00f6m\u00fcrl\u00fc token'lard\u0131r. E\u011fer bir refresh token ele ge\u00e7irilirse, k\u00f6t\u00fc niyetli ki\u015filer bu token'\u0131 kullanarak s\u00fcrekli yeni access token'lar alabilir ve kullan\u0131c\u0131n\u0131n Google hesab\u0131na s\u00fcresiz eri\u015fim sa\u011flayabilir. Refresh token'\u0131 iptal etmek, bu t\u00fcr bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131n\u0131 tamamen ortadan kald\u0131r\u0131r ve uygulaman\u0131z\u0131n kullan\u0131c\u0131n\u0131n Google hesab\u0131na eri\u015fimini kal\u0131c\u0131 olarak keser.<\/p>\n","protected":false},"excerpt":{"rendered":"Google ile iPhone uygulamalar\u0131na giri\u015f yapmak, kullan\u0131c\u0131lar i\u00e7in hem pratik hem de g\u00fcvenli bir kimlik do\u011frulama y\u00f6ntemi sunar. Ancak, bir uygulaman\u0131&#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-37992","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Google ile iPhone Uygulamas\u0131ndan G\u00fcvenli \u00c7\u0131k\u0131\u015f (Yerel Metro Sunucusu ve Geli\u015ftirme Ortam\u0131) - B\u00f6l\u00fcm 7\/7: Oturumu Kapatma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Google ile iPhone Uygulamas\u0131ndan G\u00fcvenli \u00c7\u0131k\u0131\u015f (Yerel Metro Sunucusu ve Geli\u015ftirme Ortam\u0131) - B\u00f6l\u00fcm 7\/7: Oturumu Kapatma\" \/>\n<meta property=\"og:description\" content=\"Google ile iPhone uygulamalar\u0131na giri\u015f yapmak, kullan\u0131c\u0131lar i\u00e7in hem pratik hem de g\u00fcvenli bir kimlik do\u011frulama y\u00f6ntemi sunar. Ancak, bir uygulaman\u0131...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-21T00:30:46+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Google ile iPhone Uygulamas\u0131ndan G\u00fcvenli \u00c7\u0131k\u0131\u015f (Yerel Metro Sunucusu ve Geli\u015ftirme Ortam\u0131) &#8211; B\u00f6l\u00fcm 7\/7: Oturumu Kapatma\",\"datePublished\":\"2026-01-21T00:30:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/\"},\"wordCount\":2616,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/\",\"name\":\"Google ile iPhone Uygulamas\u0131ndan G\u00fcvenli \u00c7\u0131k\u0131\u015f (Yerel Metro Sunucusu ve Geli\u015ftirme Ortam\u0131) - B\u00f6l\u00fcm 7\/7: Oturumu Kapatma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-21T00:30:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Google ile iPhone Uygulamas\u0131ndan G\u00fcvenli \u00c7\u0131k\u0131\u015f (Yerel Metro Sunucusu ve Geli\u015ftirme Ortam\u0131) &#8211; B\u00f6l\u00fcm 7\/7: Oturumu Kapatma\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Google ile iPhone Uygulamas\u0131ndan G\u00fcvenli \u00c7\u0131k\u0131\u015f (Yerel Metro Sunucusu ve Geli\u015ftirme Ortam\u0131) - B\u00f6l\u00fcm 7\/7: Oturumu Kapatma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/","og_locale":"tr_TR","og_type":"article","og_title":"Google ile iPhone Uygulamas\u0131ndan G\u00fcvenli \u00c7\u0131k\u0131\u015f (Yerel Metro Sunucusu ve Geli\u015ftirme Ortam\u0131) - B\u00f6l\u00fcm 7\/7: Oturumu Kapatma","og_description":"Google ile iPhone uygulamalar\u0131na giri\u015f yapmak, kullan\u0131c\u0131lar i\u00e7in hem pratik hem de g\u00fcvenli bir kimlik do\u011frulama y\u00f6ntemi sunar. Ancak, bir uygulaman\u0131...","og_url":"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-21T00:30:46+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Google ile iPhone Uygulamas\u0131ndan G\u00fcvenli \u00c7\u0131k\u0131\u015f (Yerel Metro Sunucusu ve Geli\u015ftirme Ortam\u0131) &#8211; B\u00f6l\u00fcm 7\/7: Oturumu Kapatma","datePublished":"2026-01-21T00:30:46+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/"},"wordCount":2616,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/","url":"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/","name":"Google ile iPhone Uygulamas\u0131ndan G\u00fcvenli \u00c7\u0131k\u0131\u015f (Yerel Metro Sunucusu ve Geli\u015ftirme Ortam\u0131) - B\u00f6l\u00fcm 7\/7: Oturumu Kapatma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-21T00:30:46+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/google-ile-iphone-uygulamasindan-guvenli-cikis-yerel-metro-sunucusu-ve-gelistirme-ortami-bolum-7-7-oturumu-kapatma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Google ile iPhone Uygulamas\u0131ndan G\u00fcvenli \u00c7\u0131k\u0131\u015f (Yerel Metro Sunucusu ve Geli\u015ftirme Ortam\u0131) &#8211; B\u00f6l\u00fcm 7\/7: Oturumu Kapatma"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37992","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=37992"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37992\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37992"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37992"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37992"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}