【Custom URL Scheme】iOSってディープリンクって言わないの？【appIndexing用に設定するけどよくわからない】



### [2015/06/19 記事書き直しました。此方をご参考にして下さい。](http://qiita.com/mmusasabi/items/38c3d5067199366f6d14)

## ios appIndexigが来る。

[iOSアプリのApp IndexingをGoogleがサポート開始](https://www.suzukikenichi.com/blog/google-supports-app-indexing-to-ios-apps/)

という記事を見ました。

とうとうiosでもappIndexing出来るようになるのか。
[アンドロイドの設定はやったけど（僕の前の記事）](http://qiita.com/mmusasabi/items/fd35037aecc1772dd11b)iosのディープリンクの設定とかやってなかったから、ちょっとやっとこうかな。

## ぐぐるが出ない。

な、なんかそれっぽい資料が見つからないぞ？

それもそのはず。iosではAndroidで言うディープリンクの設定のことをURL Schemeの設定と言うらしい。
見つからないわけだ！

よし、いい記事も見つかったし早速取り組んでみよう。

####この記事は超さくっと実装だけしたい人向けです。詳細は下記記事がすごく参考になるので、どうぞ。
[Custom URL Schemeの処理をシンプルに書く](http://qiita.com/naonya3/items/c55e6151b4ff6ab5725f)

##Custom URL Scheme実装 3step

### step1

まず、(アプリ名)-info.plistを開きます

### step2

![スクリーンショット 2015-06-11 16.22.19.png](https://qiita-image-store.s3.amazonaws.com/0/42310/f723cf2e-d675-d99f-42ea-15cdfbd95f86.png "スクリーンショット 2015-06-11 16.22.19.png")

こんな感じで打ち込みます。

###step3

![スクリーンショット 2015-06-11 16.23.22.png](https://qiita-image-store.s3.amazonaws.com/0/42310/0c40dc70-c194-0712-a525-5af4239fd8e0.png "スクリーンショット 2015-06-11 16.23.22.png")

URL Shemesに打ち込んだ文字列をsafariに打ち込みます。

アプリ起動！やった！v('ω'v )三v('ω')v三( v'ω')v


なんかアンドロイドの設定より楽だな！

後はAppdelegateとかに

```appDelegate.m
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation
{
    if ([[url scheme] isEqualToString:@"test"]) {
    	//なんか処理

        return YES;
    }
    return NO;
}

```

と書けばURLスキームで立ち上がったあとの処理もラクラクです☆
URLスキームの追加方法を見たところ、複数のURLスキームが設定できるみたいですね。

しかし、同時にいくつか疑問も生まれる...

## 疑問

### 同じURLスキームだったらどうなるの？
調べた所、どうも優先順位の仕組みとかは特に無いらしく、
同じ物同士どっちが起動するかわからないようだ。被らないような名前をつけるのが大事そうだな。

### URL identifierってなに？
設定してみたもののコレ使ってないやん！

[カスタムURLスキームを利用する (3)](http://develop.calmscape.net/dev/232/)

>とのことなのでユニークな文字列を指定しましょう。
Bundle identifier と同じものを指定しておけば良いと思います。

[URL Schemes の設定について ios iPhone xcode ](http://blog.77jp.net/url-schemes-ios-iphone-xcode)
> 一意になればなんでも良いとの仕様だそうです。

此方のサイトを少し覗いてみたところ、
兎に角ユニークな物を付けておけば大丈夫そうな印象。

何に使うんだコレ...?

### 通常URLでURLスキームの設定ができないのか？

Androidだと既存のURLとか（例えば自分のサイトのURL）を踏んだ時に、アプリと関係性が有ればアプリを起動する。というディープリンクの設定が出来ました。

iosでそれは出来ないのだろうか...?

どうも僕が試した限りだと、方法が見当たらないです。
Androidとかのほうがワイルドカードの設定とか出来て便利なんだけど、
やっぱりgoogleと対立しているからかな...

### First Click Free が実現できるのか？

ちょっと良くわからないのがコレの実現です。

googleは検索結果とか、ディープリンクした後、アプリからそのリンクする前の画面にワンタップで戻ってこれないといけないというルールを設定していて、コレに乗っ取らないとwebMasterToolとかでエラーの判定になります。

でも、これiosのアプリでやるの難しくないですかね？

#### exit(1);を使ってアプリを終了させるパターン
ホーム画面に戻ってきて、終了。

#### openURLを使ってサファリを立ち上げる方法。
safariのURLスキーマがhttp:
なので、純粋safariに画面移動ができないです。やり方ご存知のかたいますか...?
safariに戻ろうと思うと、リンク先のURLをopenURLしてsafariで再度読み込むという手法で
一旦戻るという状態を作れはするものの....コレジャナイ感が。



## 総括

appleとgoogleはライバル会社で色々張り合う部分もあるんだろうけど、
もうちょっと歩み寄って、ある程度ルールの共通化とか有れば、
互いに作りやすくなるんじゃないでしょうか（小声）

また、此方の記事を見ると
[iOSアプリのApp IndexingをGoogleがサポート開始](https://www.suzukikenichi.com/blog/google-supports-app-indexing-to-ios-apps/)

>--ログインユーザーだけに適用
まず、Googleアカウントにログインしたユーザーにだけ適用されます。
AndroidのApp Indexingももともとはログインユーザーだけのものでした。
しかし現在は、ログインしていないユーザーにも適用されます。
ログインしていない場合は、クエリに関連性が高いアプリのインストールボタンを検索結果に表示します。
Google Play経由でユーザーがそのアプリをインストールすると、今インストールしたばかりのそのアプリで該当のコンテンツを開くことができます。
iOSではログインしていなければ、ユーザーはApp Indexingの恩恵を受けることはできません。

>--限定した一部のアプリ開発者だけに開放
Androidでは、すべてのアプリ開発者がApp Indexingを実装できます。
決められた仕様に従ってアプリと対応するウェブページを構成するだけです。
対してiOSでは、Googleへの申請も必要です。
また申請したからといって、必ずしもモバイル検索結果にディープリンクが表示されるとは限りません。

色々と制限がついて回るみたいですね。
まだ本格的に設定しなくても、一旦準備で大丈夫かな(´Д｀)

新しい情報を、一旦待ですかね(　ﾟДﾟ)⊃旦