哈喽大家好,我是鹏哥。
今天是圣诞节,无心加班,也无心游戏。那就把之前欠大家的博客给补上 —— 基于Pythonista3,打造属于你自己的iphone入口。
~~~上课铃~~
1
写在前面
之前我第一篇关于pythonista 3的文章就提到过,该app的作者是个大神,开发了很多有意思的样例。今天我就教大家,如何站在大神的肩膀上,快速打造一套属于你自己又简便易用的应用入口。
2
效果展示
在Pythonista的组件中,点击对应按钮即可实现软件入口,如:
支付宝/淘宝/微信:可以打开对应应用;
Pythonista:可运行对应脚本;
支付宝付款码:直接显示付款码;
鹏哥贼优秀:点击直接拨打对应人的电话;
短信:新建消息进行发送;微信扫码:直接打开微信至扫码界面 ;
3
知识串讲(敲黑板啦)
(1)app应用如何跳转
在实现我们应用入口之前,我们先了解下iphone中app是如何跳转的。每个app本身之间其实是相互隔离的,这样才会防止app之间相互窃取信息。但是每个app有个 info.plist文件,在这个文件中会记录url_scheme,而这个url_scheme字段就会记录这个app被调用起来的方式。如微信对应的是“weixin://”,支付宝是“alipay://”,这就有点像每个网站都有其对应的url地址。同样的,每个手机应用也有它特有的url_scheme。
因此,到这里,我们至少可以知道url_scheme是app的唯一标识(如果冲突,那就无法识别了)。
另外,我在这里补充下题外话。其实在调用应用时直接通过手机短信也能实现应用跳转,如下图
当对方点击你的链接,就可以实现相应的功能。因此,为什么说陌生人短信的链接不要随便点击,因为很有可能它的链接可以打开你的某些应用进行操作。
(2)如何查找一个app应用对应的url_scheme呢?
关于这个方法,网上有很多方法,我就引用一段。(当然有些app可能仍然会找不到,这个要看运气了。)
1、用itools查看iOS设备的应用程序
2、浏览(打开)‘微博’app
3、打开Weibo.app文件夹,找到info.plist文件
4、打开info.plist文件,找到
CFBundleURLSchemes 一行,下面一行… 中间的都是‘微博’app的URL Scheme。5、找到URL后复制粘贴到Launcher的自定义启动器的URL中…并在你粘贴过来的英文后面添加一个冒号两个斜杠, 比如 weibo://
(3)基于pythonista3 实现ui界面代码。
要打造属于自己的应用入口,图标的选择自然也是要讲究的。
刚开始时为了添加各种图标,我一直在查每种图标对应的字符串是怎么样的,比如感叹号是alert,电池是battery,但是在pythonista中要怎么添加呢?
其实很简单,当你随便添加一个图标后,轻点下图标字符串会弹出小图显示。
然后如果你再点下图标你就会打开新世界了!如下图,都是自带的各类图标、颜色、声音,以及其对应的定义。而且你选择点击后,程序会自动将图标设置成新的款式,贼好用!
不得不说,这个功能是个隐藏彩蛋,我也是在很偶尔的情况下才发现的。再补充下,一般像手机屏幕相对较小,图标选择24就够大了(alert_24中的24表示图标大小)。
控件颜色的设置,就相对简单对了 ,因为用的都是RGB。当然也可以在刚才的“新世界”里选择。
(4)将运行结果中,点击“Use in Today”,就会在iphone首页的窗口出现各应用入口了。
4
示例代码
其实下面这段代码在pythonista sample/Widget/Launcher.py中也有,只是我基于自己的使用习惯,修改了实现的功能。
import appex, ui
import os
from math import ceil, floor
# 默认显示2行3列,在点击more后可显示shortcuts所有内容
COLS = 3
ROWS = 2
# 只需要修改shortcuts内容,其中title和url必填,其他字段会有默认值
SHORTCUTS = [
{'title': '支付宝', 'url': 'alipay://', 'color': '#4dd19d','icon':'iow:social_bitcoin_24'},
{'title': '淘宝', 'url': 'taobao://', 'color': '#a9de31','icon':'iow:ios7_cart_24'},
{'title': '微信', 'url': 'weixin:', 'color': '#ffd026','icon':'iow:chatbubbles_24'},
{'title': 'Pythonista', 'url': 'pythonista3://', 'color': '#45d3e8','icon': 'iob:chevron_right_24'},
{'title': '百度', 'url': 'http://baidu.com', 'color': '#ff8e13','icon':'iow:ios7_world_outline_24'},
{'title': '支付宝付款码', 'url': 'alipay://platformapi/startapp?appId=20000056', 'color': '#ff4a09','icon':'iow:ios7_keypad_32'},
{'title': '鹏哥贼优秀', 'url': 'tel://12345678', 'color': '#5e96ff', 'icon': 'iow:ios7_telephone_24'},
{'title': '短信', 'url': 'sms://', 'color': '#5ec0ff', 'icon': 'iow:email_32'},
{'title': '微信扫码', 'url': 'weixin://scanqrcode', 'color': '#5ec0ff', 'icon': 'iow:ios7_camera_32'},
]
class LauncherView (ui.View):
def __init__(self, shortcuts, *args, **kwargs):
row_height = 110 / ROWS
super().__init__(self, frame=(0, 0, 300, ceil(len(shortcuts) / COLS) * row_height), *args, **kwargs)
self.buttons = []
# 将每个按钮功能进行添加至UI控件中
# 如果之前icon不设置,那默认采用有compass_24图标;color字段也一样
for s in shortcuts:
btn = ui.Button(title=' ' + s['title'], image=ui.Image(s.get('icon', 'iow:compass_24')), name=s['url'], action=self.button_action, bg_color=s.get('color', '#55bcff'), tint_color='#fff', corner_radius=9)
self.add_subview(btn)
self.buttons.append(btn)
# 界面按钮大小布局
def layout(self):
bw = self.width / COLS
bh = floor(self.height / ROWS) if self.height <= 130 else floor(110 / ROWS)
for i, btn in enumerate(self.buttons):
btn.frame = ui.Rect(i%COLS * bw, i//COLS * bh, bw, bh).inset(2, 2)
btn.alpha = 1 if btn.frame.max_y < self.height else 0
# 按钮点击关联的功能
def button_action(self, sender):
import webbrowser
webbrowser.open(sender.name)
def main():
widget_name = __file__ + str(os.stat(__file__).st_mtime)
v = appex.get_widget_view()
# Optimization: Don't create a new view if the widget already shows the launcher.
if v is None or v.name != widget_name:
v = LauncherView(SHORTCUTS)
v.name = widget_name
appex.set_widget_view(v)
if __name__ == '__main__':
main()
最后再说点关于pythonista脚本的调用方式。上述示例代码中我只是打开pythonista应用,但如何想调用test.py脚本并且带参数a=123,对应的url_scheme如下
pythonista3://test.py?a=123
5
常用URL_Scheme补充
为 了方便大家快速实现自己的应用入口,我把常见的一些应用url共享给大家(其实也是从网上收集的)
以下url_scheme转自https://blog.csdn.net/wm9028/article/details/49995329
淘宝宝贝搜索 taobao://http://s.taobao.com/?q=[prompt]
淘宝店铺搜索
taobao://http://shopsearch.taobao.com/browse/shop_search.htm?q=[prompt]
QQ的url是 mqq://
微信是weixin://
淘宝taobao://
点评dianping:// dianping://search
微博 sinaweibo://
名片全能王camcard://
weico微博weico://
支付宝alipay://
豆瓣fm:doubanradio://
微盘 sinavdisk://
网易公开课ntesopen://
美团 imeituan://
京东openapp.jdmoble://
人人renren://
我查查 wcc://
1号店wccbyihaodian://
有道词典yddictproapp://
知乎zhihu://
优酷 youku://
ZAKER :【zakeripad://】
mdict:【mdict://】
京东hd:【openApp.jdiPad://】
易迅:【wx6964eb0b10aa369b://】;【icson://】;【wap2app://】;【com51buyiPad://】;【sinaweibosso.2217266362://】;【yixunipad://】;
wunderlist:【fb208559595824260://】;【wunderlist://】;
1password:【db-0bcm217bz8olcxj://】;
支付宝:【alipay://】;
亚马逊:【fb115829135094686://】;
查找朋友:【grenada://】;【findmyfriends://】;【fmf1://】;
查找iphone:【fmip1://】;
homestyler:【fb110202249127916://】;
百度旅游hd:【sinaweibosso.3772466956://】;
百度视频hd:【BaiduVideoiPad://】;【baiduvideoipadapp://】;
百度相册hd:【BaiDuCloudAlbumHD://】;
百度音乐hd:【tencent100518384://】;【QQ05FDC9F0://】;【wxdeda8b7428c87b0b://】;【sinaweibosso.4257500584://】;【BaiduMusicHD://】;
百度浏览器hd:【bdbrowser://】;
百度文库hd:【bdwenku://】;
百度地图hd:【sinaweibosso.675661989://】;
百度云:【tencent100312028://】;
扇贝炼句:【wx6cf98af31a47ba29://】;
百词斩:[wxce5d9e837051d623://】;
一个one:【clover-one://】;
launchpro:【launch://】;【launchpro://】;【launchpro-light://】;【launchpro-dial://】;【launchpro-tweet://】;【launchpro-brightness://】;【launchpro-messaging://】;【launchpro-email://】;【launchpro-dropbox://】;【launchpro-clipboard://】;【launchpro-facebook://】;【launchpro-sinaweibo://】;【launch-textexpander://】;【db-23algz5zbfx3ocs://】;【launchipad://】;
当当hd:【dangdanghd://】;【ddhd://】;
大众点评hd:【dianpinghd://】;
多看阅读:【duokan-reader://】;
艺龙旅行hd:【elongiPad://】;
圈点hd:【skitch://】;
食记hd:【wxb9a9141190826bd8://】;
印象笔记hd:【enx://】;
popAgraph:【popagraphtumblr://】;
dropbox:【db-auth://】;【dbapi-1://】;【dbapi-2://】;【dbapi-3://】;【fb210019893730://】;
goodreader:【ghttp://】;【ghttps://】;【grhttp://】;【grhttps://】;【giwhttp://】;【giwhttps://】;【gropen://】;【com.goodreader.sendtogr://】;
houzz:【fb166981393359376://】;
ifttt:【ifttt://】;
名片全能王hd:【camcard://】;【fb444471182246461hdfull://】;【CamCardHDOpenAPI://】;
万年历:【wx5f3a0d4653cd3485://】;
拉手团购hd:【LaShouGroupHDPay://】;
美团hd:【iMeituan://】;
evermemo:【evermemo://】;
网易云课堂:【wangyiyunketang://】;
网易公开课:【ntesopen://】;
订票助手2:【trainassistfree://】;
pcalc lite:【pcalc://】;
爱奇艺视频:【QIYIHD-iPad://】;
documents:【fb435446596521711://】;
三国kill:【sgk://】;
知乎日报hd:【wb2812384762://】;【wb801442902://】;【wx81bd672c6e11bad0://】;【QQ05FE6368://】;【tencent100557672://】;【pocketapp89757://】;
扇贝新闻:【shanbaynews://】;
扇贝单词:【shanbay://】;
扇贝单词hd:【shanbaywordshd://】;
微盘:【sinaweibosso.2938478327://】;【sinavdisksso.2938478327://】;
新浪公开课:【wxa376b1970423b610://】;
skype:【skype://】;
什么值得买hd:【wxed08b6c4003b1fd5://】;
搜狐视频hd:【sohu-SViPad://】;【sohuvideohd://】;【wx91d741cfa16379bc://】;
teamviewer:【teamviewer8://】;
格志:【griddiary://】;【sumi-interactive://】;【db-d7wn1aiwz2ck3tj://】;
淘宝hd:【taobao://】;【itaobao://】;【taobaohd://】;【wx25e5e60c1e9fcd97://】;【sinaweibosso.346252009://】;【zhuzhancaipiao4ipad://】;【laiwangc6e34c6bf://】;
天猫:【tmall://】;
腾讯视频hd:【tenvideohd://】;【tenvideo2://】;
qq通讯录:【tencentappqqpim://】;
qq:【mqqflyticket://】;
微信:【weixin://】;【fb290293790992170://】;【wechat://】;
同步推正版HD:【tbtui://】;【tuihd://】;
航旅纵横pro:【sinaweibosso.umetrip://】;【umetrippro://】;
mathpad:【myscriptmathpad://】;
下厨房:【wxd80665a1fc1bf282://】;
无忌论坛:【wb801384327://】;【wxe932dc78276c3c24://】;【wb1315970163://】;
雅虎天气!:【yweather://】;
一号店:【ipadstore://】;
优酷hd:【youkuhd://】;
知乎日报:【wx841a6aace4a1dca4://】;
知乎:【zhihu://】;
dieselfacts:【dk.publishonline.dieselfacts.china://】;【dps.9aebe5a79fb04d9abddf77d97c6794dc://】;
欧陆词典pro:【eudic://】;
拓词:【towordsp://】;
瘦身旅程:【sina.5253876156240b2daf015c9d://】;
词ci:【wx599b00cd734bd4a9://】;
newsapp:// 新闻首页
newsapp://vote 每日一投
网易公开课: ntesopen://
网易应用: apper://
网易彩票: ntescaipiao://
网易微博: microblogging://
有道词典: yddictProapp://
一淘火眼比价:QQ05FDCA9D://
支付宝信用卡还款页面:alipays://platformapi/startapp?appId=09999999
Evernote[evernote://]
SimpleMind+[simplemind://]
MindMeister [mindmeist://]
Daybox[daybox://]
QQ同步助手[qqpim://]
福晰PDF[ boxsdk-srnspz7etrtko4y9u2tqcj8i8gzzqzm6://]
izip[db-2vxl8w8i8zibqzc://]
wps office[kingsoftofficeapp://]
CAD快速看图:没找到
有道[yddict://]
随手记[fdmoney://]
全国违章查询[mianfeijiaotongweizhang://](木仓科技出品的)
Black Tower![blacktower1://]
Stick Hero英雄难过棍子关[com.ketchapp.stickhero:/
如果以上url还不能满足你的诉求,可以到下面的这些博客里查找。
(1)常用 url:
https://blog.csdn.net/qq_39714355/article/details/95320267
(2)支付宝内部功能调用APP的said说明:
https://blog.csdn.net/ytd7777/article/details/85240926
(3)微信常用url_scheme参数:
https://www.jianshu.com/p/8ea8d22e3d12
最后今天圣诞节,大家圣诞快乐呀!88,下周见!
~~~下课铃~~~
点击下方诗句,可以留言互动喔
林深时见鹿,海蓝时见鲸,梦醒时见你
【关注“鹏哥贼优秀”公众号,回复“python学习材料”,将会有python基础学习、机器学习、数据挖掘、高级编程教程等100G视频资料,及100+份python相关电子书免费赠送!】
扫描二维码
与鹏哥一起
学python吧!