質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

1169閲覧

アプリが終了された事をサーバーに通知する方法はありませんか?

corecore

総合スコア12

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/04/10 07:57

データベースにアクティブなユーザーのみを記録したいと考えていて、アプリが終了した時にデータベースから削除するコードを書きました。下のコードではサーバーからデートを受け取っていますが、これは終了を通知するだけの関数なので本来は必要ありません。
applicationWillTerminateの中にidをキーとしてURLリクエストを送る関数を書きましたが、これは悪い方法だとわかりました。実際、リクエストURLは正しく作成されているのにサーバーサイドのSQL文は動作しませんでした。アプリを起動しているユーザーをサーバーが識別する方法はありませんか?ご教示願います。
環境 swift4, mySQL, PHP7

swift

1func applicationWillTerminate(_ application: UIApplication) { 2 appExitRequest() 3} 4 5func appExitRequest() { 6 let settings = UserDefaults.standard 7 let id = settings.string(forKey: myId) 8 9 guard let myId = id?.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else { 10 return 11 } 12 13 14 guard let req_url = URL(string: "http://localhost/test.php/terminate?myId=(myId)") else { 15 return 16 } 17 print(req_url) 18 let req = URLRequest(url: req_url) 19 let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main) 20 let task = session.dataTask(with: req, completionHandler: { 21 (data, response, error) in 22 session.finishTasksAndInvalidate() 23 do { 24 print("OK", data ?? "Empty") 25 } catch { 26 print("Failure", error) 27 } 28 }) 29 task.resume() 30}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

アプリを起動しているユーザーをサーバーが識別する方法はありませんか?

現実問題として、非常に難しいと思います。

まずサーバーと常時通信ができる環境なのかという問題があります。
クライアントが携帯端末の場合、不意に電源が落ちたり、圏外になったりということも考えられます。

もし常時通信が可能だという環境であれば、一定間隔でヘルスチェック通信を行えばアプリの起動状況を確認することはできます。

「データベースから削除」が即時反映する必要がなければ、次回起動時に処理するようにした方が良いかもしれません。

投稿2019/04/11 09:17

nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

corecore

2019/04/11 11:15

バックグラウンドスレッドでwebsocketを使用するというのはどうでしょうか?今はマルチタスクとソケット通信について調べています
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問