是否可以远程打开我的iOS应用程序?

时间:2017-04-21 05:35:33

标签: ios iphone swift

我很确定我已经知道这次尝试会产生什么样的结果,但在我开始付出很多努力之前,我应该向别人问一下这个问题。这是我想要尝试的:

我正在Swift中开发一个iOS应用程序,我只是编写了一个PHP脚本来向我的设备发送静默推送通知。在这个无声通知中,我正在传递说明,让我的应用委托使用UIApplication.shared.openURL(url:)方法打开应用。只有当用户点击在线网页上的某个按钮时才会运行此PHP脚本,只有当用户在他的iPhone设备上使用Safari网络浏览器并且我的应用已经在后台运行时才能访问该按钮,因此没有机会除了已经安装了我的应用并在后台运行的iPhone之外,任何人都可以从任何其他设备触发PHP脚本。如果你想知道为什么我会使用这个解决方法,而我也可以使用像URL方案或深层链接这样简单的东西,嗯,这很简单:首先,深度链接要求用户确认他想要我的应用程序在实际打开之前打开。我不想要这个,相反,我希望我的应用程序一旦点击按钮就会自动打开。其次,在通过深层链接或通用链接打开应用程序后,状态栏中会出现这个非常烦人的面包屑按钮,在用户从网页转换到我的应用程序后,该按钮不应再存在。我已经尝试了一切来摆脱确认提示和breadcrumb按钮,这是我能想到的最后一件事。即使应用程序已在后台打开并运行,是否可以使用远程通知触发openURL方法?

2 个答案:

答案 0 :(得分:1)

您无法在没有用户互动的情况下打开/启动应用前景

答案 1 :(得分: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推送套件集成的更多资料。