爱意满满的作品展示区。
iPocket

[送码] 维护了快一年的会员订阅管理工具 — 口袋订阅,最近大幅优化了一版本

  •  
  •   iPocket · May 26 · 5540 views
    This topic created in 61 days ago, the information mentioned may be changed or developed.
    一个苹果 iOS 原生制作的会员订阅管理工具 —— 口袋订阅,维护了快一年了,总体很稳定了,非常感谢国内外的朋友反馈,特别是一个老外叫 Jimmy ,好像非常喜欢我这款产品,他发现 bug 总是发邮件给我,邮件里有和他对话的几十封邮件了,真的非常感谢,也很开心。
    产品主打简约,可以快速添加会员订阅,快速查找会员订阅,其他功能,订阅 APP 里该有的应该都有。然后可以通过长按别的 APP 分享到 口袋订阅 快速添加,也可以通过搜索 APP/网站 名称来快速添加,其他功能我倒觉得没那么重要,主要看个大概的费用。
    APP 不搜集你的任何数据,这里其实有个缺点,就是你想改善你的产品的时候,没有数据,就会发现无从下手,你根本不知道用户在哪个页面体验不好😂,全靠用户从其他渠道反馈,邮件、小红书等。如有苹果开发者也可以一起交流下这方面的经验。
    App Store 地址: https://apps.apple.com/cn/app/%E5%8F%A3%E8%A2%8B%E8%AE%A2%E9%98%85-%E8%AE%A2%E9%98%85%E7%AE%A1%E7%90%86%E4%B8%8E%E8%B4%A6%E5%8D%95%E6%8F%90%E9%86%92/id6752631319


    留言抽 20 个永久会员,明天收市后按上证指数抽出,因为我发现我送的很多兑换码感觉被机器人秒了
    抽奖程序由 GPT 提供,代码如下
    ```javascript
    (async function lottery() {
    const drawTime = "2026-05-27 18:00:00"; // 开奖时间
    const postUrl = "https://example.com/post/123"; // 帖子链接
    const shIndex = "3123.45"; // 上证指数,建议用字符串,避免小数精度问题
    const replyTotal = 1000; // 回复总数
    const winnerCount = 20; // 抽奖个数

    if (!drawTime || !postUrl || !shIndex) {
    console.error("开奖时间、帖子链接、上证指数不能为空");
    return;
    }

    if (!Number.isSafeInteger(replyTotal) || replyTotal <= 0) {
    console.error("回复总数必须是大于 0 的安全整数");
    return;
    }

    if (!Number.isSafeInteger(winnerCount) || winnerCount <= 0) {
    console.error("抽奖个数必须是大于 0 的安全整数");
    return;
    }

    if (winnerCount > replyTotal) {
    console.error("抽奖个数不能大于回复总数");
    return;
    }

    async function sha256Hex(text) {
    const data = new TextEncoder().encode(text);
    const hashBuffer = await crypto.subtle.digest("SHA-256", data);

    return Array.from(new Uint8Array(hashBuffer))
    .map(b => b.toString(16).padStart(2, "0"))
    .join("");
    }

    function hexToBigInt(hex) {
    return BigInt("0x" + hex);
    }

    async function randomInt(seed, counter, maxExclusive) {
    const max = BigInt(maxExclusive);
    const space = 1n << 256n;
    const limit = space - (space % max);

    while (true) {
    const hash = await sha256Hex(seed + ":" + counter.value);
    counter.value++;

    const num = hexToBigInt(hash);

    // 拒绝采样,避免简单取模产生偏差
    if (num < limit) {
    return Number(num % max);
    }
    }
    }

    async function drawWinners(seed, replyTotal, winnerCount) {
    const winners = [];
    const swapped = new Map();
    const counter = { value: 0 };

    for (let i = 0; i < winnerCount; i++) {
    const remaining = replyTotal - i;
    const r = await randomInt(seed, counter, remaining);

    const selectedIndex = i + r;

    const selectedValue = swapped.has(selectedIndex)
    ? swapped.get(selectedIndex)
    : selectedIndex + 1;

    const currentValue = swapped.has(i)
    ? swapped.get(i)
    : i + 1;

    swapped.set(selectedIndex, currentValue);
    winners.push(selectedValue);
    }

    return winners;
    }

    const rawSeed = [
    `开奖时间=${drawTime}`,
    `帖子链接=${postUrl}`,
    `上证指数=${shIndex}`,
    `回复总数=${replyTotal}`,
    `抽奖个数=${winnerCount}`
    ].join("|");

    const seedHash = await sha256Hex(rawSeed);
    const winners = await drawWinners(seedHash, replyTotal, winnerCount);
    const sortedWinners = [...winners].sort((a, b) => a - b);

    console.log("========== 抽奖结果 ==========");
    console.log("原始种子:");
    console.log(rawSeed);
    console.log("");
    console.log("种子 SHA-256:");
    console.log(seedHash);
    console.log("");
    console.log("中奖楼层:");
    console.log(winners.join(", "));
    console.log("");
    console.log("中奖楼层,升序:");
    console.log(sortedWinners.join(", "));
    console.log("============================");
    })();
    ```
    147 replies    2026-06-15 09:55:19 +08:00
    1  2  
    viso7682
        101
    viso7682  
       May 27
    @iPocket #97 dmlzbzc2ODJAb3V0bG9vay5jb20= 谢谢大佬
    cyang
        102
    cyang  
    PRO
       May 27
    @iPocket bG92ZXl1eWFvQG91dGxvb2suY29t 谢谢
    viso7682
        103
    viso7682  
       May 27
    @iPocket #97 dmlzbzc2ODJAb3V0bG9vay5jb20=刚回复错了,谢谢大佬🤣
    passtest
        104
    passtest  
       May 27 via iPhone
    又当分母了🥲
    kongzz
        105
    kongzz  
       May 27
    @sun522198558 #99 谢谢老板, a29uZ0Brb25nenoueHl6
    iPocket
        106
    iPocket  
    OP
       May 27
    @sun522198558
    @Wyearn
    @viso7682
    @cyang
    @kongzz
    已发送,请查收
    lc4t
        107
    lc4t  
       May 27
    @iPocket #97 谢谢老板~ bGM0dDAuMEBnbWFpbC5jb20=
    48odaerina
        108
    48odaerina  
       May 27
    @iPocket #97 谢谢老板 NDhvZGFlcmluYUBnbWFpbC5jb20=
    luckycoding
        109
    luckycoding  
       May 27
    @iPocket 谢谢老板 cmh5c3Blbm4ubWVAZ21haWwuY29t
    vpromise
        110
    vpromise  
       May 27
    @iPocket #97 感谢 dnByb21pc2V2ZXJAZ21haWwuY29t
    iPocket
        111
    iPocket  
    OP
       May 27
    @lc4t
    @48odaerina
    @luckycoding
    @vpromise 已发送,请查收
    Muyun
        112
    Muyun  
       May 27
    支持老板
    marcoseaver
        113
    marcoseaver  
       May 27
    謝謝:d3VtYXJjb0A4OC5jb20=
    marcoseaver
        114
    marcoseaver  
       May 27
    @iPocket #97 謝謝 d3VtYXJjb0A4OC5jb20=
    chocolatesir
        115
    chocolatesir  
       May 27
    感谢楼主 Z2V0dUBkdWNrLmNvbQ==
    ganzhen
        116
    ganzhen  
       May 28 via iPhone
    @iPocket 感谢 MTQyNTgxMzIxMUAxMzkuY29t
    imbelike
        117
    imbelike  
       May 28
    @iPocket 感谢老板,bXNiZWxpdmVAaWNsb3VkLmNvbQ==
    song135711
        118
    song135711  
       May 28
    @iPocket thanks, YmVuc29uZzIwMTdAaG90bWFpbC5jb20K
    whiteleopard520
        119
    whiteleopard520  
       May 28 via iPhone
    whiteleopard520
        120
    whiteleopard520  
       May 28
    @iPocket 谢谢佬,忘记用 base 码了,MjYxOTgxNzU3QHFxLmNvbQ==
    Rex180123
        121
    Rex180123  
       May 28
    @iPocket #97 谢谢老板,Ym9sbC50YXJnZXRzLjd3QG91dGxvb2suY29t
    lwsbluesky
        122
    lwsbluesky  
       May 28
    @iPocket 谢谢大佬,邮箱:aTU2NDAyNTEwMEBnbWFpbC5jb20=
    Sooncheng
        123
    Sooncheng  
       May 28
    @iPocket 感谢老板,MTg0NTMwOTY1QHFxLmNvbQ==
    Latin
        124
    Latin  
       May 28
    @iPocket #83 谢谢老板 aWJsYWNraGFja2VkQGdtYWlsLmNvbQ==
    evilHa
        125
    evilHa  
       May 28
    @iPocket #106
    ZXZvbGluZ3lvdW5nQHFxLmNvbQ==
    谢谢老板
    w797200
        126
    w797200  
       May 28
    @iPocket #97 dzc5NzIwMEAxNjMuY29t 谢谢大佬
    sdushn
        127
    sdushn  
       May 28
    @iPocket 感谢大佬,我是 74 层,邮箱 c2R1c2huQGdtYWlsLmNvbQ==
    chiaoyuja
        128
    chiaoyuja  
       May 28
    @iPocket #97 卧槽 我竟然中了,感谢大佬, 邮箱 Y2hpYW95dWppYUBnbWFpbC5jb20=
    LightChan
        129
    LightChan  
       May 28
    @iPocket #97 [email protected] ,感谢老板🙏🥰
    LightChan
        130
    LightChan  
       May 28
    @LightChan #129 bGlnaHQuZmluZG1lQG91dGxvb2suY29t,忘记套编码了,补一个,感谢老板
    iPocket
        131
    iPocket  
    OP
       May 28
    Tongwin
        132
    Tongwin  
       May 28
    来晚了!还能再来 1 次抽奖吗?最近订阅了 gpt plus ,然后就下载了口袋订阅来提醒。
    chiaoyuja
        133
    chiaoyuja  
       May 28
    @iPocket #131 感谢,已收到,有个建议,可以单独有个地方管理硬件成本吗,记录购买的东西和时间,计算到当前的日均成本
    feisualio
        134
    feisualio  
       May 28
    很好的软件,来晚了
    tychanges
        135
    tychanges  
       May 28
    @iPocket #97 感谢大佬,邮箱:eWFueXVlemh1b0BnbWFpbC5jb20K
    emberzhang
        136
    emberzhang  
       May 28
    @iPocket 谢谢老板 ZW1iZXJ6aGFuZ0BnbWFpbC5jb20=
    sktline
        137
    sktline  
       May 28
    @Peikon 谢谢老板,eGR5bjIwMjZAb3V0bG9vay5jb20=
    vpromise
        138
    vpromise  
       May 28
    @iPocket #111 已收到,感谢,app 好看
    marcoseaver
        139
    marcoseaver  
       May 28
    @iPocket #131 謝謝!
    NullWithMe
        140
    NullWithMe  
       May 28
    NTMyODc2MDkxQHFxLmNvbQ==
    支持一下,看看是不是分子
    pljhonglu
        141
    pljhonglu  
       May 28
    @iPocket #97 cGxqaG9uZ2x1QGdtYWlsLmNvbQ== 谢谢老板
    iPocket
        142
    iPocket  
    OP
       May 28
    @pljhonglu
    @tychanges
    @emberzhang
    @sktline 已发送,请查收
    iPocket
        143
    iPocket  
    OP
       May 28
    @chiaoyuja 在设置里有个地方可以开启日均成本
    iPocket
        144
    iPocket  
    OP
       May 28
    @Tongwin 开发新的软件后都会送兑换码的
    lepig
        145
    lepig  
       May 29
    @iPocket #97

    感谢老板 bGVwaWdAcXEuY29t
    windowlife
        146
    windowlife  
       May 29
    d2luZG93bGlmZUBxcS5jb20=‌
    谢谢
    qhy2ch
        147
    qhy2ch  
       Jun 15
    @iPocket #95 感谢大佬,邮箱:bGJienlmMDIyNkBnbWFpbC5jb20=
    1  2  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5019 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 112ms · UTC 09:49 · PVG 17:49 · LAX 02:49 · JFK 05:49
    ♥ Do have faith in what you're doing.