Just a Computer Graphics Studio & My Life

平常我們會去呼叫其它的App來達到我們的目的,如想要開啟網頁就會叫出Safari App,是怎麼做到的呢?就是使用URL Scheme,格式:

schemename://

schemename可以是以下幾個例子:

http, https, ftp : Web links ((launches the Safari app)
mailto : E-mail links (launches the Mail app)
tel : Telephone Numbers (launches the Phone app)
sms : Text Messages (launches the SMS app)

那如果我們想要讓他人能夠開啟我們的App,又該如何做到呢?就來客製化 URL Scheme (Custom URL Scheme)吧!

首先在專案A中的Info.plist做設定:

使用 URL Scheme

記得要在欄位中用選擇的方式(自己打無效⋯⋯)挑出URL types,然後也是用選擇的方式建立URL Schemes,接著將我們想要的名稱打上去,例如GarbageGuard。

最後在專案A的AppDelegate.m實作內建方法:

// 在被呼叫開啓時所執行的內建函式
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    // 顯示分析NSURL的結果
    NSLog(@"url: %@", [NSString stringWithFormat:@"%@", [url description]]);
    return YES;
}

如此就能在其它App呼叫它時,來處理其被傳入的訊息囉~我們編譯執行先擺著⋯⋯

接下來由專案B寫以下程式碼:

    if ([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"GarbageGuard://"]]) {
        // 開啓目標應用程式並以 NSURL 的方式帶入資訊
        [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"GarbageGuard://Be.Happy.All.The.Time"]];
    }

編譯執行後,專案A的Debug平台就會出現:

url: GarbageGuard://Be.Happy.All.The.Time

而畫面也從專案B App轉往到專案A App,是不是很神奇呢:)?

參考:

廣告

Comments on: "[iOS] 客製化 URL Scheme (Custom URL Scheme)" (2)

  1. 非常感謝大大的分享,之前有個case剛好處理到類似的需求。
    也是查找了許多文章呢。

    這裡附帶一提,貌似這樣的跳轉,並沒有"返回"一說。

    所以如果你由A專案跳往B專案,那麼你如果需要返回,也只能用相同的方法從B專案跳往A專案。

    也就是兩個專案都必須設定好了schemename

    唯有系統權限的程式(如打電話: 或是照相機)

    可以在你的專案並沒有設定schemename的狀態下返回你的程式。

    如果我理解有誤,望請指教。

    Liked by 1 person

    • 目前看來也只能像你說的那樣設定來返回,像我在Chrome開地圖,就會詢問我是否要開啟Google Map,確定進入Google Map,上方就會出現返回Chrome的提示元件,我想這就是彼此設定好往返機制,因為這兩個App都是Google開發的囉~

      至於我們將自製App轉向內建App,內建App會出現「返回」我倒是沒遇過,像是轉往App Store或Safari都沒出現「返回」。不知你有試過什麼App會出現?

      喜歡

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: