2013年7月4日 星期四

定義一種協定(scheme)讓其他app可以呼叫自己寫的app

一,在.plist中的URL types中的URL schemes 加入自己想要的協定名稱,例如myApp
 (非必要)在URL identifier加入自已想要的identifier文字,例如me.spot0206

二,在AppDelegate實作- (BOOL)application:(UIApplication *)applicationhandleOpenURL:(NSURL*)url {   // Do something withthe url here },用來接收回傳的訊息


三,即可以在其他APP中被呼叫,你可以用safari的網址列來自行測試。
 例如輸入,myapp://?foo=1&amp

四,這裡打的網址就會被接收為下面的url
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    if (!url) {  return NO; }

    NSString *URLString = [urlabsoluteString];
    [[NSUserDefaultsstandardUserDefaults] setObject:URLString forKey:@"url"];
    [[NSUserDefaultsstandardUserDefaults] synchronize];
    return YES;
}

FacebookSDK3.5開始新專案前的設定

一,跳過FB app id申請,直接進入ios app撰寫
二,把解壓好的資料夾中(文件裡的facebooksdk)的FacebookSDKResources.bundle直接拖曳進你的專案。(選項選'Create groups for any added folders' and deselect 'Copy items into destination group's folder (if needed)')




三,在iOS6中,facebookSDK還要用到AdSupport, Accounts, libsqlite3, Security and Social這五個Frameworks.(如果你要build在舊版iOS,記得把不支援的Framework設為Optional)
四,上述動作作好之後,你的Project看起來會像下圖



五,把申請好的Facebook app ID,加入下列二個地方,你就可以開始coding了!
  1. 在.plist中加入FacebookAppID跟FacebookDisplayName,把他的值設好,在fb app設定頁面中都可以找的到你得輸入的值。
  2. 打開URL types,把URL Schemes的item0設為開頭為fb,後面加你的Facebook App ID。

2013年7月2日 星期二

在UIWebView執行JavaScript指令

用簡單的一個method即可達成,stringByEvaluatingJavaScriptFromString

它把指令以string方式讀入,並把回傳值以string的方式接收。


- (NSString*)executeJS
{
    NSString *returnValue = [self.webView stringByEvaluatingJavaScriptFromString:@"marq.appMessage('fb_status','{\"username\":\"LukeSun\",\"profile_pic\":\"http://4-ps.googleusercontent.com/h/www.nownews.com/newspic/1989/i1989627.jpg.pagespeed.ce.wapOg-_ZEz.jpg\" }' )"];
  
  
    NSString* ret = [returnValue stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSLog(@"return string: %@",ret);
    return ret;
}

程式處理網址的encoding跟decoding問題

因為網址列不能存在一些特殊符號,所以這些符號會使用﹪當作逃脫字元來處理
例如%7 = ~
%09 表示 Tab
%20 表示 (1sp) 即一個space鍵
%22 表示 "
%23 表示 #
%25 表示 %
%26 表示 &
%28 表示 (
%29 表示 )
%2B 表示 +
%2C 表示 ,
%2F 表示 /
%3A 表示 :
%3B 表示 ;
%3C 表示 <
%3D 表示 =
%3E 表示 >
%3F 表示 ?
%40 表示 @
%5B 表示[
%5C 表示 \
%5D 表示]
%7C 表示
%7E 表示 ~

在objective-c用下列二個方法做網址的編碼

stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding 會將網址以 UTF-8來編碼。
NSString *encodeURL = [URL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"encode URL: %@", encodeURL);

stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding 會將被編碼的文字以 UTF-8 解碼。
NSString *decodeURL = [encodeURL stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSLog(@"decode URL: %@", decodeURL);
 

2013年7月1日 星期一

An unknown error message 'InstallProhibited', was received from the device.

當安裝程式在實機測試時出現An unknown error message 'InstallProhibited', was received from the device.的錯誤訊息

代表這台機器設定了取用限制,去設定﹣>一般﹣>取用限制,輸入密碼把它解開即可。

NSString NSURL UTF8

//把string以UTF8編碼
NSString* returnValue =
        [URLstring stringByAddingPercentEscapesUsingEncoding:
         NSUTF8StringEncoding];

例如:
//要先將中文地址轉成UTF8型式,才可做為查詢網址。
    NSString* address = [@"台北巿南港區三重路19-11號" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString: [NSString stringWithFormat:@"http://maps.apple.com/maps?q=%@",address]]];




//NSURL to NSString  NSURL
NSString *returnValue = [URL absoluteString];

在字串中加入雙引號的方式

在VB,用""
在obj c,用\"