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

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

  •  
  •   iPocket · May 26 · 4330 views
    一个苹果 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("============================");
    })();
    ```
    146 replies    2026-05-29 10:19:22 +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=‌
    谢谢
    1  2  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4003 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 94ms · UTC 00:12 · PVG 08:12 · LAX 17:12 · JFK 20:12
    ♥ Do have faith in what you're doing.