2009-07-24 90 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,我们也可以注册文件类型,以便以后检索它们,但可悲的是,看起来这不支持。 握手在苹果

相关问题