2017-02-19 11 views
0

私は最初のアプリの起動時に、なぜプッシュ通知を受け入れる必要があるのか​​をユーザに説明するビューを提示します。彼はそれから2つのオプションを持っています:スキップ(彼はこれを行う場合、私はプッシュ通知のために登録することはありません)、またはプッシュ通知を受け入れます。その場合、プッシュ通知ポップアップを表示します。iOS - registerForRemoteNotifications別のUIViewコールバック

私には2つの問題があります。まず第一に、私はいつも次のコードで、AppDelegateでプッシュ通知を登録するために使用:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法で

if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) 
{ 
    UIUserNotificationType types = (UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound); 
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:nil]; 
    [application registerUserNotificationSettings:settings]; 
    [application registerForRemoteNotifications]; 
} 

私は今、2つのボタンで表示するビューでこの全く同じコードを使用しようとしています。私はAppDelegateからコードを削除しました。とにかくこれは動作しますか? AppDelegateのコードを持つ問題は、最初の起動時にプッシュ通知を受け入れるか拒否するかをユーザーに直接促すということです。これは避けたいものです。

次に、ユーザーがプッシュ通知(ポップアップ上)を受け入れるか拒否するとすぐに知る必要があるという問題があります。私は彼がどんな決定をしたかに気をつけません。次の見解を示すことができるように、ただちに知っておく必要があります。

私は、次のデリゲートメソッド試してみた:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 

-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error

をしかし、私は許可または許可しないのいずれかをクリックしたときに呼び出されません。

これを行う正しい方法は何ですか?

+1

はい、アプリケーションのどこからでもリモート通知の登録を呼び出すことができます。 – ystack

+0

Thanks @ystack。コールバックについて知っていますか? –

答えて

1

私はこの問題を解決しました。 まず、@ystackによってコメントされているように、アプリ内のどこでもリモート通知の登録を絶対に呼び出すことができます。同じのViewControllerで

 [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(pushNotificationClicked:) 
               name:@"pushNotification" 
               object:nil]; 

そして最後に、この方法:

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { 
[application registerForRemoteNotifications]; 
[[NSNotificationCenter defaultCenter] 
postNotificationName:@"pushNotification" 
    object:self]; 
} 

は、その後、私は私の特定のViewControllerでこれを追加しました:

第二に、私は私のアプリの委任でこのメソッドを追加しました

- (void)pushNotificationClicked:(NSNotification *) notification { 

if ([[notification name] isEqualToString:@"pushNotification"]){ 
    //do whatever you want 
} 
} 

この方法では、ユーザーが[許可]または[許可しない]を押したときにコールバックを取得します。

関連する問題