久々にアプリ開発に関する記事を書こうと思う。
内容的にはいつもと同じで検索すれば出てくる内容だが、自分なりにまとめるためにも書いておく。
機能としては、先日リリースしたアプリに入れた機能で、SNSへの投稿を直接行う機能。
思ったよりも簡単だった。
ちなみに、未だにObjective-Cを使用している。
まずは、「Social.framework 」を追加する。
その後、利用するファイルのヘッダに下記のインポートを追加する。
#import <Social/Social.h>
さらに、ソース部分の実際の投稿処理を追加する。
この時に、Facebookとtwitterの両方に対応を行うようにしたため、その判断も一緒に入れた。
NSString *serviceType;
if (type == POSTING_FACEBOOK) {
serviceType = SLServiceTypeFacebook;
}else{
serviceType = SLServiceTypeTwitter;
}
if ([SLComposeViewController isAvailableForServiceType:serviceType]) {
SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:serviceType];
[controller setCompletionHandler:^(SLComposeViewControllerResult result) {
if (result == SLComposeViewControllerResultDone) {
// 投稿画面が閉じるのを待ってから、アラート表示を行う
[NSThread sleepForTimeInterval:0.5];
dispatch_async(dispatch_get_main_queue(), ^{
//投稿成功時の処理
NSString *message;
if (type == POSTING_FACEBOOK) {
message = @"facebookに投稿しました";
}else{
message = @"twitterに投稿しました";
}
id alertView = [ScreenStatusChk uialertViewInit:@""
massageString:message
cancelString:@"OK"
controller:nil];
[ScreenStatusChk uialertViewOpen:alertView controller:self];
});
}
}];
//保存する画像を取得
[self getImageData:&image];
NSString *string = [NSString stringWithFormat:@"追加イメージ"];
[controller setInitialText:string];
[controller addImage:image];
[self presentViewController:controller
animated:NO
completion:NULL];
}
実際には、 投稿ボタンを押した時に動作するようにし、「type」に、Facebookとtwitterの種別が入力されるようにしてある。
これだけで、動作上は問題なく投稿する事ができる。
ただし、これだけだと、ネットワークに繋がっていなくても投稿できたように見える。
そのため、さらにネットワークが使えるのかの確認を行うようにする。
そのために、「Reachability」という公式のライブラリを使用した。
まずは下記のサンプルをダウンロードする。
Reachability – iOS Developer Library
この中に入っている、下記の2ファイルを利用したいプロジェクトにコピーする。
・Reachability.h
・Reachability.m
さらに、「SystemConfiguration.framework 」を追加する。
先ほどと同じように、利用するファイルのヘッダに下記のインポートを追加する。
#import "Reachability.h"
そして、先ほどのソースの前に、下記のソースを追加して、投稿処理の前に、それぞれのサーバーとの接続状態のチェックを行う。
当然、接続できない場合には、投稿処理を行わずに、エラーメッセージを表示して、終了させた。
if (type == POSTING_FACEBOOK) {
reachability = [Reachability reachabilityWithHostName:@"www.facebook.com"];
}else{
reachability = [Reachability reachabilityWithHostName:@"twitter.com"];
}
NetworkStatus status = [reachability currentReachabilityStatus];
if (status == ReachableViaWiFi) {
// wifi接続時
} else if (status == ReachableViaWWAN) {
// 3G接続時
} else if (status == NotReachable) {
// 接続不可
id alertView = [ScreenStatusChk uialertViewInit:@"接続エラー"
massageString:@"電波状況の良いところでやり直してください"
cancelString:@"OK"
controller:nil];
[ScreenStatusChk uialertViewOpen:alertView controller:self];
return;
}
これだけの処理の追加で、投稿処理自体はどうさした。
予想以上に簡単にできたので、あると便利と思ったアプリに同じものをコピーして入れていった。
[0回]
PR