2013年12月13日星期五

提高开发效率 -> 图片 - gliubc

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
提高开发效率 -> 图片 - gliubc  阅读原文»

相比于文字, 我们从图片中获取的信息是更快和更多的.

所以, 应当大量使用图片, 大量地截图和看图, 不管是针对资料还是代码都应如此.

这里给大家推荐两个好用的小工具, 一个是截图(DuckLink Screen Capture), 另一个就是看图(JpegView 注:虽然叫Jpeg查看, 但是常见的图片格式它都能看的),

两个都是free的, google就能找到.

相比于一般的截图软件, DuckLink最大的特色在于两点. 滚动截图和自动保存的功能

滚动截图:(注: 图片其实是很清楚的, 可能会因为网络显示的问题, 造成显示不清, 不要有任何顾虑)

自动保存:

这个功能最方便了, 只要一点自动保存, 它就用当前时间给你起个名保存了, 省时省力.

最后一个数是秒数.

JpegView也是相当地给力呀!

不同于一般的看图软件, 这个软件虽小巧却功能丰富.

比如我打开一张图片的显示效果

没有一点多余的东西, 直奔主题, 就是这么简单.

关键是它还有个全屏模式, 更具冲击力

图片下方显示了一些参数, 可以通过改变这些参数对图片做一些简单的处理.

还有一个功能不得不提, 就是这个图片小地图的功能, 对于浏览大型图片, 这个功能必不可少呀!!!

图片右侧显示了一个小地图, 那就是这张大图片的一个缩略图, 通过小地图可以快速定位到大图片的某一部分.

说到这顺便提一下另外一个软件吧, Sublime Text文本编辑器, 它里面也有个地图, 跟这个差不多, 可以快速定位到某一段代码


本文链接:http://www.cnblogs.com/liubaocheng999/p/3474178.html,转载请注明。

使用PushSharp给iOS应用推送消息 - �月  阅读原文»

PushSharp是一个C#编写的服务端类库,用于推送消息到各种客户端,支持iOS(iPhone/iPad)、Android、Windows Phone、Windows 8、Amazo、Blackberry等设备。

官方网站:https://github.com/Redth/PushSharp

当前最新稳定版本为2.0.4,支持通过NuGet获取(https://www.nuget.org/packages/PushSharp/)

主要特点

提供了易于使用的API,支持以下平台的消息推送:

100%的托管代码完全兼容Mono平台。

安装

PushSharp主要包含以下程序集:

  • PushSharp.Core:(必选)核心组件
  • PushSharp.Apple:APNS,用于iOS及OSX
  • PushSharp.Android:C2DM及GCM,用于Android设备
  • PushSharp.Windows:用于Windows 8
  • PushSharp.WindowsPhone:用于WP设备
  • PushSharp.Amazon.Adm:用于Amazon的设备
  • PushSharp.Blackberry:用于黑莓设备
  • PushSharp.Google.Chrome:用于Chrome

其中,PushSharp.Core为必须的组件,其他的可以根据自己需要来选择对应平台。

平常使用只需要用NuGet来获取程序集即可:

Install-Package PushSharp

这样会把主流平台的程序集(Apple/Android/Windows/WindowsPhone)都下载下来,可以根据自己需要删除用不到的平台组件。

假如需要使用Blackberry等NuGet包里没有的组件,则需要到官方网站(https://github.com/Redth/PushSharp)获取源码自行编译。

对于Apple平台,只需要PushSharp.Core和PushSharp.Apple组件即可。

证书配置

官方WIKI提供了详细的证书配置步骤:

Apple平台证书创建流程:

  • 创建AppID
  • 为AppID配置用于APP签名的证书:分别有开发环境(Development)和生产环境(Production)的证书
  • 编辑AppID启用消息推送
  • 为AppID创建用于消息推送(APNS)的证书(包括Development和Production)
  • 下载以上证书并安装到Key Chain(钥匙串)
  • 导出用于消息推送(APNS)的证书为.p12格式,并为它设置密码:用于在服务端推送消息

对于Apple平台需要特别说明:

  • Provisioning Protal现在已经变成了Certificates, Identifiers & Profiles,可以从Member Center点进去或者iOS Developer Center找到
  • 对于已经发布的APP要启用消息推送功能,需要在Identifiers � App IDs找到对应的ID创建好APNS证书之后,再重新生成用于APP签名的证书,否则用于注册消息推送的代码(RegisterForRemoteNotificationTypes)不会正常工作,即返回的deviceToken为null
  • 在使用Development证书调试应用程序时服务端需要使用Development APNS证书来推送消息,使用Production证书发布到AppStore后推送消息需要使用Production APNS证书来推送消息

客户端启用消息推送

启用消息推送都是在AppDelegate里注册来完成的。

对于使用objc语言编写的客户端:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (application.enabledRemoteNotificationTypes == UIRemoteNotificationTypeNone)
{
[application registerForRemoteNotificationTypes:
UIRemoteNotificationTypeAlert |
UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound];
}
application.applicationIconBadgeNumber = -1;
// Override point for customization after application launch.
return YES;
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSString *pushToken = [[[[deviceToken description]
stringByReplacingOccurrencesOfString:@"<"withString:@""]
stringByReplacingOccurrencesOfString:@">" withString:@""]
stringByReplacingOccurrencesOfString: @" " withString: @""];
[[NSUserDefaults standardUserDefaults] setObject:pushToken forKey:@"pushtoken"]; // 保存起来
}

对于使用MonoTouch的客户端:

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
app.RegisterForRemoteNotificationTypes(
UIRemoteNotificationType.Alert |
UIRemoteNotificationType.Badge |
UIRemoteNotificationType.Sound);
app.ApplicationIconBadgeNumber = -1;
// ...
return true;
}

public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
{
string tokenStr = token.Description;
string pushToken = tokenStr.Replace("<", string.Empty).Replace(">", string.Empty).Replace(" ", string.Empty);
NSUserDefaults.StandardUserDefaults.SetString(pushToken, "pushtoken");
}

public override void FailedToRegisterForRemoteNotifications(UIApplication application, NSError error)
{

}

public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
{

}

在接收到deviceToken的时候先存储在NSUserDefaults中,在用户登录的时候再取出来一起发送到服务端:

NSString *pushToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"pushtoken"]; //objc
string pushToken = NSUserDefaults.StandardUserDefaults.StringForKey("pushtoken"); //MonoTouch

服务端在用户登录成功之后,把接收到用户的用户名与pushToken关联起来,在推送消息的时候就可以针对指定用户来推送,具体的过程略。

而对于不需要用户登录的app,可以在接收到deviceToken的时候直接发送到服务端。

更多的客户端配置参考PushSharp源码的Client.SamplesPushSharp.Client目录。

服务端推送消息

var pusher = new PushBroker();
pusher.RegisterAppleService(new ApplePushChannelSettings(File.ReadAllBytes("yourAppId.p12"), "证书的密码"));
pusher.QueueNotification(
new AppleNotification()
.ForDeviceToken(pushToken) // 从数据库等地方获取设备的pushToken
.WithAlert("测试iOS消息推送 - �月")
.WithBadge(1)
.WithSound("default")
);

在RegisterAppleService方法中可以注册多个APNS证书,PushSharp可以自动检测是Development/Production,这时候需要为证书设置标识:

pusher.RegisterAppleService(new ApplePushChannelSettings(File.ReadAllBytes("yourAppId.p12"), "证书的密码"), "证书标识如youAppId_development");
pusher.RegisterAppleService(new ApplePushChannelSettings(File.ReadAllBytes("yourAppId.p12"), "证书的密码"), "证书标识如youAppId_production");

此外,可以注册各种事件来获得各种状态:

pusher.OnDeviceSubscriptionChanged += pusher_OnDevi

阅读更多内容

没有评论:

发表评论