Just My Life & My Work

[iOS] iOS 13 Device Token 問題

某天老闆心血來潮,要推播促銷活動,發現奇怪的問題⋯⋯查詢後原來是iOS 13 Apple推播通知回傳的Device Token改變了規則~

我立馬測試我們家App取得的Device Token,結果如下:

Xcode 11編譯跑在iOS 13

Printing description of deviceToken:
<a9df8591 f9be281b 45b7fd30 c452c298 05d04532 1c8e5e93 83079040 2efd1b83>
Printing description of deviceTokebStr:
{length=32,bytes=0xa9df8591f9be281b45b7fd30c452c298…830790402efd1b83}

Xcode 11編譯跑在iOS 11

Printing description of deviceToken:
<f144b48d 96957ab9 16717a2e e36d56a3 e91c0f7f 48623985 021173dd c4097c0e>
Printing description of deviceTokebStr:
f144b48d96957ab916717a2ee36d56a3e91c0f7f48623985021173ddc4097c0e

可以看到原本該是64字元的字串,變成有length和bytes,於是乎要再另外處理。

我常用Onesignal來測試推播,從官網找到它部落格文章,有非常詳盡的說明。

問題在於:從Xcode 11開始,已將發送到iOS中的推送令牌委託的deviceToken數據的description屬性更改為其他格式。

/**
 Theme: Get Device Token String
 IDE: None
 Language: Objective C
 Date: 108/11/15
 Author: HappyMan
 Blog: https://cg2010studio.com/
 */

+ (NSString *)stringFromDeviceToken:(NSData *)deviceToken {
    NSUInteger length = deviceToken.length;
    if (length == 0) {
        return nil;
    }
    const unsigned char *buffer = deviceToken.bytes;
    NSMutableString *hexString  = [NSMutableString stringWithCapacity:(length * 2)];
    for (int i = 0; i < length; ++i) {
        [hexString appendFormat:@"%02x", buffer[i]];
    }
    return [hexString copy];
}

修改完後再來測試,已能將正確格式的Device Token送到我們家Server囉~

Xcode 11編譯跑在iOS 13

Printing description of deviceToken:
<a9df8591 f9be281b 45b7fd30 c452c298 05d04532 1c8e5e93 83079040 2efd1b83>
Printing description of deviceTokebStr:
a9df8591f9be281b45b7fd30c452c29805d045321c8e5e93830790402efd1b83

Xcode 11編譯跑在iOS 11

Printing description of deviceToken:
<f144b48d 96957ab9 16717a2e e36d56a3 e91c0f7f 48623985 021173dd c4097c0e>
Printing description of deviceTokebStr:
f144b48d96957ab916717a2ee36d56a3e91c0f7f48623985021173ddc4097c0e

參考:OneSignal iOS 13 and Xcode 11 Changes That Affect Push Notifications

隨意留個言吧:)~

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

標籤雲

%d 位部落客按了讚: