App Crashing is one of the major challenges for an app developer and he/she might end up losing a user or two for their App. We have discussed a scenario put forth, which is followed by a few easy yet powerful solution to restore the app after its crash.
アプリの故障は開発者にとって主要な困難の1つです。開発者がアプリへのユーザーを失ってしまうこともあります。私達はここから1つのシナリオを議論していきます。それは、故障後アプリを回復させるために、簡単でありながら強力なソリューションを提供しています。
Scenario: When the user immediately comes back to the application, which had crashed or user suspended its execution (example: pressing the home key on windows phone by fault) and that app consists connection resiliency feature, the user will not be able to connect until the connection resiliency time is over.
To solve this problem AppWarp has introduced two new APIs.
- int GetSessionId()
- void RecoverConnectionWithSessionID(Int sessionid,String username);
How these APIs can help you to fix the problem?
Through this blog post, I will be explaining how to use these APIs through our unity sample App.
Step 1
Successyfully connect the call GetSessionId and save the SessionId in local storage.
public void onConnectDone (ConnectEvent e){
switch (e.getResult ()) {
case WarpResponseResultCode.SUCCESS:
PlayerPrefs.SetInt ("SessionID", WarpClient.GetInstance().GetSessionId());
PlayerPrefs.Save ();
break;
}
}
Step 2 (when user restarts the app)
If we have SessionId in our local storage, it means user is coming back after the app had crashed or suspended, so call the RecoverConnectionWithSessioId else call the connect API.
if (PlayerPrefs.HasKey ("SessionID")){
int sessionID = PlayerPrefs.GetInt ("SessionID");
WarpClient.GetInstance ().RecoverConnectionWithSessioId (sessionID, localUser);
} else{
Log ("SessionId is not available");
WarpClient.GetInstance ().Connect (localUser);
}
Step 3
Don’t forget to remove SessionId from local storage on clean exit.
void OnApplicationQuit (){
if (PlayerPrefs.HasKey ("SessionID")) {
PlayerPrefs.DeleteKey ("SessionID");
PlayerPrefs.Save ();
}
}
Miscellaneous
We have also introduced ReasonCode in ConnectEvent, just incase you are getting an AuthError. With this, you can check its reasoncode also.
public void onConnectDone (ConnectEvent e){
switch (e.getResult ()){
case WarpResponseResultCode.AUTH_ERROR:
if (e.getReasonCode () == WarpReasonCode.WAITING_FOR_PAUSED_USER) {
//Auth Error:Server is waiting for previous sessionId
//it will happen only when you are using connection resilency feature and
//trying to reconnect within the connection resilency time
}
break;
}
}
Complete source code of the sample can be downloaded or viewed from our Git repo.
If you have any questions or need further assistance, please feel free to write to us at support@shephertz.com.
シナリオ; ユーザーが故障したアプリに突然戻ってくるときや、ユーザーがその実行(例えば、間違ってWindows phoneでホームキーを押してしまった場合)延期したとき、またアプリが接続回復機能を構成しているとき、ユーザーは接続回復時間が終わるまで、接続を回復できないでしょう。
この問題を解決するために、AppWarpは2つの新しいAPIsを紹介しています。
- int GetSessionId()
- void RecoverConnectionWithSessionID(Int sessionid,String username);
これらのAPIsは、どのようにしてあなたの助けとなるのでしょうか。
このブログの投稿を通じて、私達のUnityサンプルアプリを用いて、これらのAPIsの使用方法を説明していきましょう。
ステップ1
コールGet Session IDに接続して、ローカルストレージでSession IDを保存しましょう。
public void onConnectDone (ConnectEvent e){
switch (e.getResult ()) {
case WarpResponseResultCode.SUCCESS:
PlayerPrefs.SetInt ("SessionID", WarpClient.GetInstance().GetSessionId());
PlayerPrefs.Save ();
break;
}
}
ステップ2(ユーザーがアプリを再開するとき)
もし私達がローカルストレージでSession IDを持っているならば、それはアプリが故障したまたは停止した後、ユーザーが戻って来ていることを意味しています。従って、Recover Connection With Session IDとコネクトAPIにコールしましょう。
if (PlayerPrefs.HasKey ("SessionID")){
int sessionID = PlayerPrefs.GetInt ("SessionID");
WarpClient.GetInstance ().RecoverConnectionWithSessioId (sessionID, localUser);
} else{
Log ("SessionId is not available");
WarpClient.GetInstance ().Connect (localUser);
}
ステップ3
クリーンエグジットで、ローカルストレージからSession IDを取り除くことを忘れないでください。
void OnApplicationQuit (){
if (PlayerPrefs.HasKey ("SessionID")) {
PlayerPrefs.DeleteKey ("SessionID");
PlayerPrefs.Save ();
}
}
様々なケース
Auth Errorになってしまった場合、Connect EventでReason Codeを紹介しています。これによって、あなたはそのReason Codeも確認することができます。
public void onConnectDone (ConnectEvent e){
switch (e.getResult ()){
case WarpResponseResultCode.AUTH_ERROR:
if (e.getReasonCode () == WarpReasonCode.WAITING_FOR_PAUSED_USER) {
//Auth Error:Server is waiting for previous sessionId
//it will happen only when you are using connection resilency feature and
//trying to reconnect within the connection resilency time
}
break;
}
}
サンプルの完全なソースコードは、Gitレポジトリからダウンロードまたは閲覧することができます。
もしなにか質問がある、またはより多くの助けを必要とするならば、どうぞご自由にsupport@shephertz.com.にご連絡ください。
Leave A Reply