{"id":436,"date":"2022-06-19T16:14:06","date_gmt":"2022-06-19T13:14:06","guid":{"rendered":"https:\/\/serkanyarar.com.tr\/blog\/?p=436"},"modified":"2023-01-02T00:25:14","modified_gmt":"2023-01-01T21:25:14","slug":"android-13e-api-33-hazirlik","status":"publish","type":"post","link":"https:\/\/serkanyarar.com.tr\/blog\/programlama\/android-13e-api-33-hazirlik\/","title":{"rendered":"Android 13&#8217;e (API 33) hazirlik"},"content":{"rendered":"\n<p>Merhaba arkada\u015flar;<br>Bildi\u011finiz \u00fczere her y\u0131l Google k\u00fct\u00fcphanelerini yeniliyor. Eski s\u00fcr\u00fcm kod kitapl\u0131klar\u0131na art\u0131k destek verilmedi\u011fi i\u00e7in, kodlar\u0131n\u0131z\u0131 g\u00fcncel tutman\u0131z son derece \u00f6nemli. E\u011fer sizde \u015fu projemi bir g\u00fcncelleyeyim deyip, eski bir projeyi Android Studio&#8217;da a\u00e7maya \u00e7al\u0131\u015ft\u0131ysan\u0131z muhtemelen pek \u00e7ok hatayla kar\u015f\u0131la\u015ft\u0131n\u0131z. \u00c7\u00f6zmek i\u00e7in internete ba\u015fvurdu\u011funuzda da bir r\u00fczgar sizi buraya, benim bloguma savurdu. \ud83d\ude42 Bundan son derece mutluyum. Gelin ad\u0131m ad\u0131m hatalar\u0131m\u0131z\u0131 \u00e7\u00f6zelim.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jetifier Nedir?<\/h2>\n\n\n\n<p id=\"6a92\">Jetifier, AndroidX&#8217;i kullanmak i\u00e7in \u00fc\u00e7\u00fcnc\u00fc taraf ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131n ta\u015f\u0131nmas\u0131na yard\u0131mc\u0131 olur.\u00a0Jetifier, AndroidX kullanan projelerle uyumlu hale getirmek i\u00e7in bu ba\u011f\u0131ml\u0131l\u0131klar\u0131n bayt kodunu de\u011fi\u015ftirecektir.\u00a0Ancak Jetifier kaynak kodunuzu de\u011fi\u015ftirmez veya olu\u015fturulan kodunuzu ta\u015f\u0131maz.<\/p>\n\n\n\n<p>Bu y\u00fczden bu i\u015flemleri manuel olarak, kendimiz yapmal\u0131y\u0131z.<\/p>\n\n\n\n<p id=\"2a48\">Uygulaman\u0131zda Jetifier&#8217;\u0131 etkinle\u015ftirmek i\u00e7in <strong>gradle.properties<\/strong> dosyan\u0131za \u015fu iki sat\u0131r\u0131 ekleyin :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>android.useAndroidX=true\nandroid.enableJetifier=true<\/code><\/pre>\n\n\n\n<p>Proje d\u00fczeyinde <strong>build.gradle (Project: UygulamaAdi)<\/strong> dosyan\u0131z\u0131 kontrol edin;  (\u015funa benzer \u015fekilde olmal\u0131)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Top-level build file where you can add configuration options common to all sub-projects\/modules.\nbuildscript {\n    repositories {\n        google()\n        mavenCentral()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:7.3.1'\n        classpath 'com.google.gms:google-services:4.3.10'\n        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.0'\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        mavenCentral()\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n<\/code><\/pre>\n\n\n\n<p>Uygulama d\u00fczeyinde <strong>build.gradle (Module: UygulamaAdi.app)<\/strong> dosyan\u0131z\u0131n da bi&#8217; g\u00f6zden ge\u00e7mesi gerek, \u00f6nemli k\u0131s\u0131mlar\u0131 sizin i\u00e7in vurgulad\u0131m.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apply plugin: 'com.android.application'\n\nandroid {\n    <strong>compileSdkVersion <\/strong>33\n    <strong>buildToolsVersion <\/strong>\"33.0.0\"\n    defaultConfig {\n        applicationId \"com.paketadi.ornekuygulama\"\n        <strong>minSdkVersion <\/strong>19\n        <strong>targetSdkVersion <\/strong>33\n        versionCode 1\n        versionName \"v1.0.0\"\n        multiDexEnabled true\n        testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\n    }\n    buildTypes {\n        release {\n            shrinkResources true\n            minifyEnabled true\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        targetCompatibility JavaVersion.VERSION_11\n        sourceCompatibility JavaVersion.VERSION_11\n    }\n    namespace 'com.paketadi.ornekuygulama'\n    ndkVersion '24.0.8215888'\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: &#91;\"*.jar\"])\n    \/\/ Android X\n    implementation 'androidx.appcompat:appcompat:1.4.2'\n    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'\n    implementation 'androidx.core:core:1.9.0-alpha05'\n\n    implementation \"com.google.android.gms:play-services-games-v2:+\"        \/\/ Google Play Game services\n    implementation 'com.google.android.gms:play-services-location:19.0.1'\n    implementation 'com.google.android.gms:play-services-ads:21.0.0'        \/\/ Google Mobile Ads\n    implementation 'com.google.android.gms:play-services-plus:17.0.0'       \/\/ Google+\n    implementation 'com.google.android.gms:play-services-auth:20.2.0'      \/\/ Google Account Login\n    implementation 'com.google.android.gms:play-services-base:18.0.1'      \/\/ Google Actions, Base Client Library\n    implementation 'com.google.android.gms:play-services-identity:18.0.1'  \/\/ Google Address API\n    implementation 'com.google.android.gms:play-services-nearby:18.2.0'    \/\/ Google Nearby\n\n    \/\/ Firebase\n    implementation platform('com.google.firebase:firebase-bom:30.1.0')\n    implementation 'com.google.firebase:firebase-analytics'\n    implementation 'com.google.firebase:firebase-crashlytics'\n\n    testImplementation 'junit:junit:4.13.2'\n    androidTestImplementation 'androidx.test.ext:junit:1.1.3'\n    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'\n}\napply plugin: 'com.google.gms.google-services'\napply plugin: 'com.google.firebase.crashlytics'\n\n<\/code><\/pre>\n\n\n\n<p>E\u011fer daha \u00f6nce projenizde &#8220;<strong>FirebaseCrash<\/strong>&#8221; kulland\u0131ysan\u0131z, burdada bi&#8217; tak\u0131m de\u011fi\u015fikler oldu. Gelin bakal\u0131m;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Eski kullan\u0131m\nFirebaseCrash.logcat(Log.ERROR, getString(R.string.app_name), \"Hata Mesaji.\");\nFirebaseCrash.report(ex);\n\n\/\/ Yeni kullan\u0131m\nFirebaseCrashlytics.getInstance().log(\"Hata Mesaji\");<\/code><\/pre>\n\n\n\n<p>Tabi <strong>Google Sign In<\/strong> i\u00e7in kulland\u0131\u011f\u0131n\u0131z s\u0131n\u0131flar da siz ortal\u0131kta yokken de\u011fisti. Eskiden \u015fu \u015fekilde tan\u0131ml\u0131yorduk;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/-----------------API Ayar\u0131---------------------------------\n        mGoogleApiClient = new GoogleApiClient.Builder(this)\n                .addConnectionCallbacks(this)\n                .addOnConnectionFailedListener(this)\n                .addApi(Games.API).addScope(Games.SCOPE_GAMES)\n                .build();\n        \/\/----------------------------------------------------------<\/code><\/pre>\n\n\n\n<p>Bu s\u0131n\u0131f tamamen kullan\u0131mdan kald\u0131r\u0131ld\u0131. Bunun yerine art\u0131k <strong>PlayGamesSdk<\/strong>&#8216;s\u0131n\u0131 kullanaca\u011f\u0131z; <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import com.google.android.gms.games.PlayGames;\nimport com.google.android.gms.games.PlayGamesSdk;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\n        \/\/ Google Play Games\n        PlayGamesSdk.initialize(this);\n        GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(this);\n        gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -&gt; {\n            boolean isAuthenticated = (isAuthenticatedTask.isSuccessful() &amp;&amp; isAuthenticatedTask.getResult().isAuthenticated());\n            if (isAuthenticated) {\n                Log.d(TAG, \"isAuthenticated : true =&gt; Giri\u015f zaten yap\u0131ld\u0131 !\");\n                \/\/...\n            } else {\n                \/\/ Play Games Hizmetleriyle entegrasyonunuzu devre d\u0131\u015f\u0131 b\u0131rak\u0131n veya\n                \/\/ oyunculardan oturum a\u00e7malar\u0131n\u0131 istemek i\u00e7in bir oturum a\u00e7ma d\u00fc\u011fmesi g\u00f6sterin.\n                \/\/ \u00dczerine t\u0131klamak, Oyun Oturum A\u00e7ma \u0130stemcisini \u00e7a\u011f\u0131rmal\u0131d\u0131r.\n                Log.e(TAG, \"isAuthenticated : false =&gt; Oturum aciliyor..\");\n                gamesSignInClient.signIn().addOnSuccessListener(this);\n            }\n        });<\/code><\/pre>\n\n\n\n<p>\u015eimdi nihayet <strong>Play Games Hizmetleri<\/strong>ni kullanabiliriz, ancak hala ba\u015far\u0131m kilidi a\u00e7ma (<strong>Achievements<\/strong>) ve skor tablosu (<strong>Leaderboard<\/strong>) nas\u0131l g\u00f6sterece\u011fimizi \u00e7\u00f6zmemiz gerekiyor. Hat\u0131rlarsan\u0131z \u00f6nceden ba\u015far\u0131mlar ekran\u0131n\u0131 a\u00e7mak i\u00e7in \u015f\u00f6yle yap\u0131yorduk;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (mGoogleApiClient != null &amp;&amp; mGoogleApiClient.isConnected()) {\n        startActivityForResult(Games.Achievements.getAchievementsIntent(mGoogleApiClient), REQUEST_ACHIEVEMENTS);\n} else {\n        Toast.makeText(getApplicationContext(), R.string.signin_not, Toast.LENGTH_LONG).show();\n}\n<\/code><\/pre>\n\n\n\n<p>Tahmin edebilece\u011finiz gibi art\u0131k bu y\u00f6ntem i\u015fe yaramayacakt\u0131r. Bunun yerine bir showAchievements() isimli bir metot olu\u015ftural\u0131m;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public void showAchievements() {<br>    PlayGames.<em>getAchievementsClient<\/em>(this)<br>            .getAchievementsIntent()<br>            .addOnSuccessListener(new OnSuccessListener&lt;Intent&gt;() {<br>                @Override<br>                public void onSuccess(Intent intent) {<br>                    startActivityForResult(intent, <em>RC_ACHIEVEMENT_UI<\/em>);<br>                }<br>            });<br>}<\/code><\/pre>\n\n\n\n<p>\u0130\u015fte oldu \u015fimdi s\u0131rada skor tablosunu yani Leaderboard&#8217;s\u0131 kullan\u0131c\u0131ya g\u00f6stermek var. \u00d6nce eski kodumuza bir bakal\u0131m;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>startActivityForResult(Games.Leaderboards.getAllLeaderboardsIntent(<em>mGoogleApiClient<\/em>), REQUEST_LEADERBOARD);<\/code><\/pre>\n\n\n\n<p>Bunu silip yerine <strong>showLeaderboard()<\/strong> metodunu \u00e7a\u011f\u0131ral\u0131m. Bu metodun kodlar\u0131 ise \u015fu \u015fekilde;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private void showLeaderboard() {<br>    PlayGames.<em>getLeaderboardsClient<\/em>(this)<br>            .getLeaderboardIntent(getString(R.string.<em>leaderboard_klasik_dookunanlar<\/em>))<br>            .addOnSuccessListener(new OnSuccessListener&lt;Intent&gt;() {<br>                @Override<br>                public void onSuccess(Intent intent) {<br>                    startActivityForResult(intent, <em>RC_LEADERBOARD_UI<\/em>);<br>                }<br>            }).addOnFailureListener(new OnFailureListener() {<br>                @Override<br>                public void onFailure(@NonNull Exception e) {<br>                    Log.<em>e<\/em>(TAG, \"showLeaderboard() =&gt; \" + e);<br>                    FirebaseCrashlytics.<em>getInstance<\/em>().recordException(e);<br>                }<br>            });<br>}<\/code><\/pre>\n\n\n\n<p>Buraya kadar haz\u0131r\u0131z. Peki \u00f6nceden bir olay ger\u00e7ekle\u015fti\u011finde kullan\u0131c\u0131m\u0131za nas\u0131l ba\u015far\u0131m a\u00e7\u0131yorduk?<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Eski kullan\u0131m\nGames.Achievements.unlock(mGoogleApiClient, getString(R.string.<em>achievement_vote_us<\/em>));\n\n\/\/ Yeni kullan\u0131m\nPlayGames.getAchievementsClient(this).unlock(getString(R.string.<em>achievement_vote_us<\/em>));<\/code><\/pre>\n\n\n\n<p>Baz\u0131 ba\u015far\u0131mlar direk a\u00e7\u0131lmaz, ula\u015f\u0131lmas\u0131 gerekilen hedefler vard\u0131r. Art\u0131r\u0131ml\u0131 ba\u015far\u0131mlar i\u00e7in kodlar\u0131m\u0131z;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Eski kullan\u0131m\nGames.Achievements.increment(MainActivity.mGoogleApiClient, getString(R.string.achievement_x), turSayisi);\n\n\/\/ Yeni kullan\u0131m\nPlayGames.getAchievementsClient(this).increment(getString(R.string.achievement_x), turSayisi);<\/code><\/pre>\n\n\n\n<p>Oyun bitti\u011finde kullan\u0131c\u0131n\u0131n oyundaki skorunu g\u00fcncellemeniz gerekir. \u00d6rne\u011fin kullan\u0131c\u0131m\u0131z yeni bir &#8220;<strong>High Score<\/strong>&#8221; yapt\u0131\u011f\u0131nda bunu Play Games sunucular\u0131nda da g\u00fcncellemeliyiz. Gelin bunu nas\u0131l yapaca\u011f\u0131m\u0131za da bi&#8217; bakal\u0131m;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Eski kullan\u0131m\nGames.Leaderboards.submitScore(MainActivity.mGoogleApiClient, getString(R.string.<em>leaderboard_kolay<\/em>), turSayisi);\n\n\/\/ Yeni kullan\u0131m\nPlayGames.getLeaderboardsClient(this).submitScore(getString(R.string.leaderboard_kolay), turSayisi);<\/code><\/pre>\n\n\n\n<p>Gelelim <strong>Google AdSense<\/strong> ayarlar\u0131m\u0131za, biraz yorulduk fakat \u00e7ok az kald\u0131. Eski kodumuz muhtemelen \u015fu \u015fekildeydi;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ ----------------- Google AdSense ---------------------\n        AdView adView = (AdView) this.findViewById(R.id.adView);\n        AdRequest adRequest = new AdRequest.Builder()\n                .addTestDevice(\"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\")\n                .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)\n                .build();\n        if (adView != null) {\n            adView.loadAd(adRequest);\n        }<\/code><\/pre>\n\n\n\n<p>Yeni kodumuz ise \u015fu \u015fekilde olacak; <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    try {\n        mAdView = findViewById(R.id.adView);\n        configuration = new RequestConfiguration.Builder().setTestDeviceIds(Arrays.<em>asList<\/em>(<em>testDeviceIds<\/em>)).build();\n        MobileAds.<em>setRequestConfiguration<\/em>(configuration);\n        MobileAds.<em>initialize<\/em>(this, new OnInitializationCompleteListener() {\n            @Override\n            public void onInitializationComplete(InitializationStatus initializationStatus) {\n                Log.<em>d<\/em>(TAG, \"MobileAds => onInitializationComplete()\");\n                mAdView.setAdSize(AdSize.BANNER);\n                mAdView.setAdUnitId(\"ca-app-pub-XXXXXXXXXXXXXXXX\/XXXXXXXXXX\");\n                adRequest = new AdRequest.Builder().build();\n                mAdView.loadAd(adRequest);\n            }\n        });\n    } catch (Exception ex) {\n        Log.<em>e<\/em>(TAG, \"Google AdSense => \" + ex);\n        crashlytics.recordException(ex);\n    }<\/code><\/pre>\n\n\n\n<p>Burda \u015funlara dikkat etmeniz gerekiyor. Aksi takdirde <strong>Google AdMob<\/strong> \u00fcyeli\u011finiz <strong>feshedilebilir <\/strong>veya <strong>ask\u0131ya al\u0131nabilir<\/strong>.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Google AdMob hesab\u0131n\u0131za giri\u015f yap\u0131n.<\/li>\n\n\n\n<li>Sol taraftaki men\u00fcden <strong>Ayarlar<\/strong> -> <strong>Test cihazlar\u0131<\/strong> alan\u0131na gidin.<\/li>\n\n\n\n<li><strong>Test Cihaz\u0131 Ekle<\/strong> butonuna t\u0131klay\u0131n.<\/li>\n<\/ol>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>E\u011fer hala hata al\u0131yorsan\u0131z. S\u0131n\u0131flar, kitapl\u0131klar vs. eski ve yeni s\u00fcr\u00fcm\u00fc kontrol edebilmeniz i\u00e7in a\u015fa\u011f\u0131ya bir tablo b\u0131rak\u0131yorum. Yapman\u0131z gereken CTRL + R tu\u015flar\u0131na basarak eski kodlar\u0131 yenisi ile de\u011fi\u015ftirmek.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Android (Eski)<\/strong><\/td><td><strong>Android X<\/strong><\/td><\/tr><tr><td>import android.support.v7.app.AppCompatActivity;<\/td><td>import androidx.appcompat.app.AppCompatActivity;<\/td><\/tr><tr><td>import android.support.v4.app.Fragment;<\/td><td>import androidx.fragment.app.Fragment;<\/td><\/tr><tr><td>import android.support.annotation.NonNull;<\/td><td>import androidx.annotation.NonNull;<\/td><\/tr><tr><td>import android.support.design.widget.BottomNavigationView;<\/td><td>import com.google.android.material.bottomnavigation.BottomNavigationView;<\/td><\/tr><tr><td>import android.arch.lifecycle.ViewModelProvider;<\/td><td>import androidx.lifecycle.ViewModelProvider;<\/td><\/tr><tr><td><strong>dependencies <\/strong><\/td><td><\/td><\/tr><tr><td><s>compile<\/s> fileTree(dir: &#8216;libs&#8217;, include: [&#8216;*.jar&#8217;])<\/td><td>implementation fileTree(dir: &#8220;libs&#8221;, include: [&#8220;*.jar&#8221;])<\/td><\/tr><tr><td><s>compile<\/s> &#8216;com.android.support.constraint:constraint-layout:2.0.4&#8217;<\/td><td>implementation &#8216;androidx.constraintlayout:constraintlayout:2.1.4&#8217;<\/td><\/tr><tr><td><s>compile<\/s> &#8216;com.android.support:appcompat-v7:25.3.1&#8217;<\/td><td>implementation &#8216;androidx.appcompat:appcompat:1.4.2&#8217;<\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><s>testCompile<\/s> &#8216;junit:junit:4.12&#8217;<\/td><td>testImplementation &#8216;junit:junit:4.13.2&#8217;<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Tablo Android X &#8211; S\u0131n\u0131flar ve K\u00fct\u00fcphaneler<\/figcaption><\/figure>\n\n\n\n<p>Buraya kadar okudu\u011funuz ve benimle kald\u0131\u011f\u0131n\u0131z i\u00e7in te\u015fekk\u00fcr ederim. Tekrar g\u00f6r\u00fc\u015fmek \u00fczere, ho\u015f\u00e7akal\u0131n.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Merhaba arkada\u015flar;Bildi\u011finiz \u00fczere her y\u0131l Google k\u00fct\u00fcphanelerini yeniliyor. Eski s\u00fcr\u00fcm kod kitapl\u0131klar\u0131na art\u0131k destek verilmedi\u011fi i\u00e7in, kodlar\u0131n\u0131z\u0131 g\u00fcncel tutman\u0131z son derece \u00f6nemli. E\u011fer sizde \u015fu projemi bir g\u00fcncelleyeyim deyip, eski bir projeyi Android Studio&#8217;da a\u00e7maya \u00e7al\u0131\u015ft\u0131ysan\u0131z muhtemelen pek \u00e7ok hatayla kar\u015f\u0131la\u015ft\u0131n\u0131z. \u00c7\u00f6zmek i\u00e7in internete ba\u015fvurdu\u011funuzda da bir r\u00fczgar sizi buraya, benim bloguma savurdu. \ud83d\ude42 Bundan [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[150,3],"tags":[153,154,151,155,152,156],"class_list":["post-436","post","type-post","status-publish","format-standard","hentry","category-android","category-programlama","tag-153","tag-154","tag-android","tag-eski","tag-guncelleme","tag-jetifier"],"_links":{"self":[{"href":"https:\/\/serkanyarar.com.tr\/blog\/wp-json\/wp\/v2\/posts\/436","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/serkanyarar.com.tr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/serkanyarar.com.tr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/serkanyarar.com.tr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/serkanyarar.com.tr\/blog\/wp-json\/wp\/v2\/comments?post=436"}],"version-history":[{"count":24,"href":"https:\/\/serkanyarar.com.tr\/blog\/wp-json\/wp\/v2\/posts\/436\/revisions"}],"predecessor-version":[{"id":495,"href":"https:\/\/serkanyarar.com.tr\/blog\/wp-json\/wp\/v2\/posts\/436\/revisions\/495"}],"wp:attachment":[{"href":"https:\/\/serkanyarar.com.tr\/blog\/wp-json\/wp\/v2\/media?parent=436"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/serkanyarar.com.tr\/blog\/wp-json\/wp\/v2\/categories?post=436"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/serkanyarar.com.tr\/blog\/wp-json\/wp\/v2\/tags?post=436"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}