2017-04-21 97 views
0

我很確定我已經知道這次嘗試的結果會是什麼,但在我開始經歷很多努力之前,我應該向某人提出這個問題。以下是我想嘗試的:是否可以遠程打開我的iOS應用程序?

我正在Swift中開發一個iOS應用程序,並且我剛寫了一個PHP腳本來向我的設備發送靜默推送通知。在此靜默通知中,我將指示傳遞給我的應用程序委託使用UIApplication.shared.openURL(url:)方法打開應用程序。只有當用戶點擊在線網頁上的某個按鈕時纔會運行此PHP腳本,只有當用戶在其iPhone設備上使用Safari Web瀏覽器並且我的應用程序已經在後臺運行時才能訪問該腳本,所以沒有機會任何人都可以從任何其他設備觸發PHP腳本,而不是已經安裝了我的應用並在後臺運行的iPhone。如果您想知道爲什麼我會使用這種解決方法,而我也可以使用像URL方案或深度鏈接這樣簡單的方法,那麼這很簡單:首先,深度鏈接需要用戶確認他希望我的應用程序在它實際打開之前打開。我不想要這個,相反,我希望我的應用程序在按鈕被點擊時自動打開。其次,通過深層鏈接或通用鏈接打開應用程序後,狀態欄中會顯示令人討厭的麪包屑按鈕,在用戶從網頁切換到我的應用程序後,該按鈕不應再存在。我嘗試了一切,以擺脫確認提示和麪包屑按鈕,這是我能想出的最後一件事。即使應用程序已經打開並在後臺運行,是否可以使用遠程通知觸發openURL方法?

+1

無聲推送通知可以在你的情況下,一個解決方案檢查該教程http://hayageek.com/ios-silent-push -notifications/ –

+0

Safari擴展程序? - 但在我看來,這是一個更高級的用戶。 –

回答

0

您可以使用靜默推送通知(Pushkit)。

它也可以在後臺和app終止模式下工作。

一旦您收到靜默推送通知,您必須使用通知中的交互式按鈕安排本地通知。

由於每個用戶的點擊,你的應用程序將是開放的,與didFinishLaunchingWithOption跟蹤你可以打開特定URL

注 - 無需用戶交互,你將無法在Safari中打開特定URL

您可以參考下面的代碼。

import UIKit 
import PushKit 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate,PKPushRegistryDelegate { 

    var window: UIWindow? 


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 


     let types: UIRemoteNotificationType = [.Alert, .Badge, .Sound] 
     application.registerForRemoteNotificationTypes(types) 

     self.PushKitRegistration() 

     return true 
    } 

    //MARK: - PushKitRegistration 

    func PushKitRegistration() 
    { 

     let mainQueue = dispatch_get_main_queue() 
     // Create a push registry object 
     if #available(iOS 8.0, *) { 

      let voipRegistry: PKPushRegistry = PKPushRegistry(queue: mainQueue) 

      // Set the registry's delegate to self 

      voipRegistry.delegate = self 

      // Set the push type to VoIP 

      voipRegistry.desiredPushTypes = [PKPushTypeVoIP] 

     } else { 
      // Fallback on earlier versions 
     } 


    } 


    @available(iOS 8.0, *) 
    func pushRegistry(registry: PKPushRegistry!, didUpdatePushCredentials credentials: PKPushCredentials!, forType type: String!) { 
     // Register VoIP push token (a property of PKPushCredentials) with server 

     let hexString : String = UnsafeBufferPointer<UInt8>(start: UnsafePointer(credentials.token.bytes), 
      count: credentials.token.length).map { String(format: "%02x", $0) }.joinWithSeparator("") 

     print(hexString) 


    } 


    @available(iOS 8.0, *) 
    func pushRegistry(registry: PKPushRegistry!, didReceiveIncomingPushWithPayload payload: PKPushPayload!, forType type: String!) { 
     // Process the received push 


    } 

} 

Refer推送套件整合的一些材料。

+1

如果您決定走此路線,請不要忘記在項目的功能部分啓用背景模式 – HavenB3

1

可以不開/帶到前景中的應用,而無需用戶交互

相關問題