2009-07-24 94 views
3

當用戶點擊電子郵件附件時,有什麼方法可以運行我的應用程序,以便我可以訪問附件?我可以設置我的iPhone應用程序在用戶打開電子郵件附件時運行嗎?

我想要做的是執行某種備份/對應用程序數據恢復:

  1. 用戶發送一封電子郵件,其中有一個特殊的擴展連接的數據文件(我將使用新的iPhone 3.0的消息作曲類)
  2. 如果用戶丟失了數據,他們就可以去他們的電子郵箱,並打開他們與應用程序的數據文件發送
  3. 那麼最後的電子郵件,他們只需輕按在附件上,這會導致我的應用程序運行並從該文件恢復

技術上可以執行最後一步嗎?

感謝

回答

5

移動果園有一個偉大的教程,介紹如何通過序列化SQL精簡版數據庫的自定義URL處理器恢復應用程序的數據庫: Lite To Paid iPhone Application Data Migrations With Custom URL Handlers

(轉述從文章的指令)在

  1. Setup a custom URL handler您項目的Info.plist Setup a custom URL handler http://www.mobileorchard.com/wp-content/uploads/2009/01/result.png
  2. 在您的電子郵件消息轉換您的數據庫或應用程序數據的NSData的base64,並將其包含在URL 例如:

    [的NSString stringWithFormat:@ 「爲MyApplication://本地主機/ importDatabase%@」,encodedStringData]

  3. 添加handleOpenURL方法AppDelegate中實現

例的AppDelegate實現:

#import "GTMBase64.h" 

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    if([@"/importDatabase" isEqual:[url path]]) { 
     NSString *query = [url query]; 
     NSString *importUrlData = [GTMBase64 webSafeDecodeString:query]; 

     // NOTE: In practice you will want to prompt the user to confirm before you overwrite their files! 
     [importUrlData writeToFile:@"/path/to/FullApplication/Documents/file" atomically:YES]; 
     return YES; 
    } 
    return NO; 
} 

Mobile Orchard文件大小限制:

我們已經通過這種方式傳輸了高達 100k的文件,並且URL 字符串的大小在理論上僅限於 的available memory。也就是說,這個 的方法最適合於 應用程序的小到中等大小的 數據傳輸要求。儘管最好的 ,它可以很容易地用於 SQLite數據庫,XML文件,文本 文件,甚至擴展到處理 壓縮檔案。

+0

Mobile Orchard博客看起來不錯。我剛剛訂閱了它 – Aler 2009-07-25 01:08:49

1

我不認爲你可以有一個特定的文件類型的應用程序運行,但可以將其作爲偵聽特定的URL方案登記的,例如參見:

http://iosdevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html

因此,如果您的應用程序的數據是不是太龐大了,你也許可以使用自定義的base64編碼的URL樣

mycustomappbackup:// [大量的數據,這裏]

+0

嘿大衛,thx爲您提供幫助。你知道自定義URL長度是否有限制? – Aler 2009-07-24 21:18:39

0

我的應用程序(Listomni)使用URL方法備份數據庫併發送郵件,也用於從較輕的應用程序遷移到完整版本。我們另外壓縮了序列化的SQLite數據庫,這節省了很多空間。但是,對於大量數據的備份而言,這並不是最佳選擇,因爲如果用戶通過GMail或Outlook轉發郵件,則兩個客戶端都有將URL截斷爲2048字節的傾向。

我也希望能夠發送附件與iPhone OS 3.0,我們也可以註冊文件類型,以便以後檢索它們,但可悲的是,看起來這不支持。 握手在蘋果

相關問題