V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
yautou
V2EX  ›  iDev

关于iOS的推送实现~

  •  
  •   yautou · 2013-09-16 12:54:09 +08:00 · 5961 次点击
    这是一个创建于 4086 天前的主题,其中的信息可能已经有所发展或是发生改变。
    iOS的推送必须由自己的服务器与Apple的服务器来交互,进而推送到客户端。
    然而对于一些个人开发者来说,无力架设服务器、弄证书什么的,有没有可以变通的方式呢?

    分享一下我的实践,通过微信来~
    假设我们有应用一枚,叫它app咯,然后在微信上建立一个app的公众订阅号,使用app的用户可以关注此公众号(可在app内推广,关注即可获取最新动态),然后推送神马的可以在微信的公众平台上推送给关注了的用户,这样就通过微信的推送渠道来推送了自己的内容,省去不少劳动。

    仅仅这样,当然还是远远不够的,只是起到了通知的作用,还不能与我们的app交互嘛,接下来就可以用另一小trick来变通下,学名叫URLScheme。Apple是支持URLScheme来程序间交互的,实现一个程序中启动另一个程序,传递参数等,这点具体可谷歌百度。

    我们可以将推送内容结合URLScheme改为一串奇怪的链接,再推送给用户,用户即可通过此链接启动我们的app,进而通过携带的参数实现某些相应的行为。至此,已完全变通实现了iOS的推送。

    好吧,看到了这里的朋友,容许我先和你们说声thx。有过实践的童鞋可能已经发现我挖了个坑,其实,最后面的关键步骤确实是个坑。因为微信内嵌浏览器,点击我们那串奇怪的链接,并不会由iOS系统来控制跳转至我们想要的app,而是被微信自带的浏览器给hold住了,悲乎哀哉!

    微信之坑(iOS):
    1、接收个人发来的超链接,直接过滤掉,只剩纯文本;
    2、公众号发来的超链接完好,可是被内嵌浏览器hold住,只能加载完成后使用“safari打开”;
    3、图文消息文中不许超链接,“原文链接”有超链接检测,特定URLScheme被ban;
    4、没有开放主动群发消息的API,只能模拟登陆后台后进行群发,工作量挺大;
    5、、、and so on

    我实践至此,已无出路可想,分享一下,盼大神指点( ⊙ o ⊙ )啊!。没有自己的服务器与证书就不能做到推送么=。=
    20 条回复    2018-07-16 09:26:28 +08:00
    fgwww
        1
    fgwww  
       2013-09-16 12:57:12 +08:00
    租个vps
    66450146
        2
    66450146  
       2013-09-16 13:05:43 +08:00
    租个 VPS 吧,$99 都花了,不至于一年 $15 都付不起吧
    moname
        3
    moname  
       2013-09-16 13:15:54 +08:00
    @66450146 真相
    hilenlai
        5
    hilenlai  
       2013-09-16 13:31:35 +08:00   ❤️ 2
    推送服务器:
    (国内)
    1:https://www.jpush.cn/
    2:https://avoscloud.com/
    (国外)
    3:https://www.parse.com/


    AFNetwroking作者写的推送服务器:https://github.com/helios-framework/helios?source=c
    hilenlai
        6
    hilenlai  
       2013-09-16 13:48:50 +08:00
    @66450146 什么vps, 一年才15刀?
    loniper
        7
    loniper  
       2013-09-16 13:51:34 +08:00   ❤️ 1
    这是微信的AD么?
    PrideChung
        8
    PrideChung  
       2013-09-16 14:03:22 +08:00
    @hilenlai 年付15刀的vps一抓一大把,例如BuyVM
    hilenlai
        9
    hilenlai  
       2013-09-16 14:07:36 +08:00
    @PrideChung 信的过么?
    gjflsl
        10
    gjflsl  
       2013-09-16 15:12:33 +08:00   ❤️ 1
    如果你的用户数据不是很重要的话,还是用jpush吧.
    jeeve
        11
    jeeve  
       2013-09-16 16:16:09 +08:00
    jpush 还算蛮好用的!
    PrideChung
        12
    PrideChung  
       2013-09-16 17:12:11 +08:00
    @hilenlai 一些不出名的IDC有跑路风险,可以的话尽量选月付。
    tuzi
        13
    tuzi  
       2013-09-16 17:36:20 +08:00
    国内 个推应该是做的最大的吧
    est
        14
    est  
       2013-09-16 17:37:10 +08:00   ❤️ 1
    urbanairship这么牛的东西没人说?
    summer_charlie
        15
    summer_charlie  
       2013-09-16 19:03:07 +08:00   ❤️ 3
    有第三方的推送服务可以用, 并且推送量在一定范围内是免费的, 你可以 google 一下, 不需要自己构架推送服务器, 除非你有特殊需要, 如只对某些地方的用户做推送...

    先回答以下问题:
    1. 是否能看得懂英文?
    2. 是否只是针对 iOS app 推送(不考虑其他平台 如 android, wp的推送) ?

    如果都是 Yes 的话, 推荐使用 Urban Airship http://urbanairship.com/ , 全球最大的推送服务提供商.

    如果上面有一个或者更多回答为 NO 的话, 推荐使用极光推送(国内最大, 用户界面比个推好)https://www.jpush.cn/

    注:
    问题 2 是考虑到服务器链接到客户端, ios 统一使用的是 apns , 也就是说无论你使用哪个服务消息的最终发送者都会是苹果的服务器.
    而 android 就不一样了, 第三方服务都是自己实现的 SDK 后台常驻进程, 用着自己的服务器跟客户端交互, 这时候服务器的位置就需要考虑了, 这有国情限制.. 怕被墙.
    Wowbeing
        16
    Wowbeing  
       2013-09-16 19:07:07 +08:00   ❤️ 1
    楼上的真坏,这么快就终结了,看楼主说的多有成就感,大哥哥教小朋友似的。
    alswl
        17
    alswl  
       2013-09-16 23:11:39 +08:00   ❤️ 1
    PyAPNS,如果会 Python 的话,1 分钟就可以开始 Push,半小时可以架一个 API 完成。
    另外,VPS 真心不贵啊~
    yautou
        18
    yautou  
    OP
       2013-09-16 23:18:37 +08:00
    多谢回复的各位,VPS什么的自然有考虑,只是想到了这条通过微信的方法,因为构思的app与微信结合挺多的,可能有数据分享、附件工具栏等,所以才有的这么一回事。

    对于某些回复,我很抱歉文章内容或者叙述方式让你们感到不快,但是我的本意只是分享思路。一直没再来回复,是在想我的出发点真的有像你们说的那样不堪么。现在坦然了,仍觉得不失为一种方法。

    最后这帖子今天最大的收获是,在我看来复杂的事,可能真心不算事,人外有人,学习了。
    9hills
        19
    9hills  
       2013-09-16 23:37:33 +08:00
    @yautou 微信过于封闭,在Android上也是不允许共享内容到系统共享的,很扯
    XSugar
        20
    XSugar  
       2018-07-16 09:26:28 +08:00
    前几天看到个浏览器扩展的帖子。发推送到这个 app 的。有大兄弟还有那个帖子的保存吗。找不到了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1236 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:12 · PVG 02:12 · LAX 10:12 · JFK 13:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.