2016-09-26 7 views
2

私たちのアプリは毎朝午前9時に予定されているUILocalNotificationsを利用しています。このメッセージの内容は、通知が予定される5分前に作成したいAPI呼び出しに依存しています。アプリがバックグラウンドで実行中であっても、実行していなくても(API呼び出しを実行するために)実行する機能をスケジュールする方法を教えてください。

たとえば、タスクxを実行するように通知するように通知が設定されている可能性がありますが、タスクxを既に持っている可能性があります(オンラインポータルではなくアプリで)。タスクYを代わりに実行するように指示します。いろいろな理由で、プッシュ通知サーバーはまだセットアップされていませんが、すぐにテストされるので、これはテストの目的のための暫定的な解決策です。

私の質問は、アプリがバックグラウンドにある場合でも閉じている場合でも、応答に応じてインミメント通知メッセージを置き換えるAPI呼び出しをスケジュールするにはどうすればよいですか?

ありがとうございます!

+0

AppDelegateで処理するサイレントローカル通知を使用することができます。 – Callam

+0

短い答え。できません。 iOS上で特定の時刻に実行するようにアプリをスケジュールする方法はありません。 – Paulw11

+0

@Callamだから、これは基本的にはUILocalNotificationをスケジュールしていますが、カテゴリーを割り当てたりメッセージを送信したりすることなく、「火災」するが、電話機に通知バナーは表示されません。もしそうなら、私はそれを 'didReceiveLocalNotification'で処理しますか? – Glenncito

答えて

1

サイレントプッシュ通知を使用する必要があります。ペイロードでは、サーバーからさまざまな情報を得ることができます。午前9時にUILocalNotificationをスケジュールします。

サイレントプッシュ通知を使用している場合、アプリケーションはUILocalNotificationサウンドファイル(最大30秒)まで、バックグラウンド/終了状態で呼び出されます(このノートはフォアグランドではありません)。この30秒でAPI関連の作業。

通知センターにUILocalNotificationが表示されている場合、たとえば、「受け入れられたタスク」と「それ以降」の通知を持つ2つのボタンがあります。したがって、ボタンをタップしても、アプリがバックグラウンド/終了状態で起動されても、アプリを開いて特定のView Controllerにリダイレクトすることもできます。いずれの場合もAPI関連の作業を行うことができます。

あなたがNSUserDefaultであなたのUILocalNotificationオブジェクトを保つなら、あなたはまた、場合にはお使いのデバイスを再起動し、UILocalNotification、さらにAPIの仕事は非常に重要ですが、didFinishLaunchingWithOptionでそれを取得することができます。

サイレントプッシュ通知のヘルプが必要な場合は、UILocalNotificationdidFinishLaunchingWithOptionなど何かお知らせください。

紹介ノート

https://www.raywenderlich.com/123862/push-notifications-tutorial

https://www.sinch.com/tutorials/ios8-apps-and-pushkit/

https://developer.apple.com/reference/pushkit

ソースhttps://github.com/hasyapanchasara/PushKit_SilentPushNotification

のPu SHキットの実装コード

輸入のUIKit 輸入PushKit

クラスAppDelegate:UIResponder、UIApplicationDelegate、PKPushRegistryDelegate {

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 
    // From here you can schedule UILocalNotification 

} 

} 

は幸せなコーディングを持っています。

+0

ありがとうございました!サイレントプッシュ通知のチュートリアルをお勧めしますか? – Glenncito

+0

ありがとうございます@Hasya。私はまだ質問がある、VoIPへの参照の理由は何ですか? – Glenncito

+0

APIからデータを取得する依存関係を削除し、そのデータをUILocalNotificationで使用する。バックグラウンドでアプリを呼び出さなくても、APIでデータを渡すようなことはできません。そうすれば、PushKitを使ってこのようなことをすべてやり遂げることができ、あなたのことは達成可能になります。さらなるガイダンスが必要な場合は私にご連絡ください。 – Hasya

関連する問題