喚醒應用是iOS開發中常見的技術,應用喚醒的方式有多種,歸納下來,能夠分爲以下幾類:javascript
直接打開App是最直接的喚醒應用程序的方式,以iPhone爲例,能夠從主屏幕、搜索推薦、應用庫等場景中進行打開。css
當用戶收到通知消息時,點擊通知欄的通知消息也能夠喚醒應用程序,通知分爲本地通知和遠程通知兩種,從喚醒應用程序的做用上來講,這兩種通知的邏輯是一致的。下面代碼示例了發送本地通知:html
- (void)addLocalNotification { [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionSound completionHandler:^(BOOL granted, NSError * _Nullable error) { }]; UNMutableNotificationContent *notificaiton = [[UNMutableNotificationContent alloc] init]; notificaiton.title = @"本地通知"; notificaiton.body = @"通知內容"; notificaiton.badge = @(1); UNTimeIntervalNotificationTrigger *trriger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO]; UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"requsetID" content:notificaiton trigger:trriger]; [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) { }]; }
經過Scheme來喚醒應用程序也很是簡單,在上一篇教程中,咱們有介紹分享功能的集成,就有配置和使用過Scheme。要經過Scheme喚醒應用程序,首先須要添加URL Types,添加方法以下圖所示:java
上面咱們定義了一個URL Scheme爲deeplinkdemo,咱們能夠直接在瀏覽器中使用deeplinkdemo://開頭的連接來喚醒此應用程序。ios
Universal Link是一種更增強大的喚醒應用程序的方式,相關介紹官網以下:sql
https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html瀏覽器
Universal Link是iOS 9以後新增的應用跳轉功能,其能夠無縫的鏈接網站與App,不需經過瀏覽器作中轉,便可以實現應用間的無縫切換。ruby
瞭解了上述的幾種應用程序的喚醒方式,咱們回到本教程的主題:DeepLink。DeepLink又稱爲深度超鏈,其是指應用以上技術進行應用程序的無縫調起、場景還原、營銷喚醒等業務邏輯。下面,咱們就介紹如何以友盟工具平臺爲基礎來爲應用程序接入智能超鏈功能。app
使用CocoaPods的方式來集成U-Link SDK很是方便,只須要在Podfile文件夾中添加以下依賴便可:ide
pod 'UMCommon' pod 'UMDevice'
若是項目沒有使用CocoaPods進行管理,也能夠選擇手動引入的方式來集成SDK。能夠在以下網址下載到最新版的SDK:
https://developer.umeng.com/sdk/ios?acm=lb-zebra-609113-9110428.1003.4.8840408&scm=1003.4.lb-zebra-609113-9110428.OTHER\_16059174649951\_8840408
須要注意,若是採用了手動的方式引入SDK,須要在工程的Targets->BuildSettings->Other Linker Flags中添加-Objc參數,而且添加以下系統依賴庫:
CoreTelephony.framework
libz.tbd
libsqlite.tbd
SystemConfiguration.framework
在工程中集成好了SDK後,咱們還須要作一些簡單的配置,首先須要在友盟後臺建立應用程序,並在應用設置頁面中獲取到APP KEY參數,以下圖所示:
這個APP KEY參數在進行SDK的初始化時會使用到。在友盟應用後臺的Deeplink配置頁面中,咱們須要將應用的一些Scheme信息進行配置,以下圖:
以後,咱們即可以經過建立營銷活動來使用智能超鏈的功能了,首先在友盟後臺進行營銷活動的建立,頁面以下圖:
能夠看到,在建立營銷活動時,能夠配置活動名稱、活動描述、應用內跳轉的路徑以及相關參數,當用戶經過此營銷活動的連接喚醒應用程序時,咱們能夠根據這些參數來讓應用程序定位到指令的頁面,從而實現業務的無縫銜接。建立好了營銷活動後,在此活動的詳情頁面便可獲取到LinkID,在網頁中咱們使用此LinkID來喚醒應用。
建立好了營銷活動也集成完成了SDK,下面咱們能夠嘗試經過一個簡單的HTML DEMO來調試智能超鏈。HTML示例代碼以下:
<!DOCTYPE html> <html> <head> <title>Demo</title> <meta charset="utf-8" /> <script src="https://g.alicdn.com/jssdk/u-link/index.min.js"></script> </head> <body> <div> <h1>測試DeepLink跳轉</h1> <button id="btn1">喚起 App</button> </div> </body> <script type="text/javascript"> ULink.start({ id: 'usr1ffnv829fu02h', /* 平臺爲每一個應用分配的方案link ID,必填 */ data: { custom:"customn1", custom2:"custom2" } /* 自定義參數,選填 */ }).ready(function(ctx) { /* 初始化完成的回調函數 */ document.getElementById('btn1').onclick = function(e){ ctx.wakeup(); /* 用戶點擊某個按鈕時啓動app */ }; }); </script> <style type="text/css"> div { text-align: center; } button { font-size: 60px; } h1 { font-size: 60px; } </style> </html>
如上代碼所示,u-link是友盟智能超鏈在JavaScript端的SDK,調用ULink的start方法時,配置的對象id就是咱們建立的營銷活動的id,經過這種方式喚醒應用程序會自動將後臺配置的參數傳遞過去,同時咱們也能夠在data中定義更多動態參數進行傳遞。
對於Xcode工程,在應用啓動是首先須要對U-Link的SDK進行初始化操做,以下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [UMConfigure initWithAppkey:@"602505af668f9e17b8aef059" channel:nil]; return YES; }
以後實現以下幾個AppDelegate的回調來處理超鏈:
#import "AppDelegate.h" #import <UMCommon/UMConfigure.h> #import <UMCommon/MobClickLink.h> @interface AppDelegate ()<MobClickLinkDelegate> @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [UMConfigure initWithAppkey:@"602505af668f9e17b8aef059" channel:nil]; return YES; } - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { return [MobClickLink handleLinkURL:url delegate:self]; } - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { return [MobClickLink handleLinkURL:url delegate:self]; } - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler { return [MobClickLink handleUniversalLink:userActivity delegate:self]; } // 解析後的回調函數,這裏能夠拿到全部的參數與跳轉路徑信息 - (void)getLinkPath:(NSString *)path params:(NSDictionary *)params { NSLog(@"getLinkPath:%@, %@", path, params); } @end
須要注意,若是是新版Xcode建立的應用程序,須要在SceneDelegate類中實現上面的方法。